例えばこんな感じでクエリを書くと、

SELECT id, name, 'xx' FROM test_table WHERE 1

結果は、3列目の'xx'はタイトル行から全ての行の値まで'xx'になります。

id  name  xx
1   aaa   xx
2   bbb   xx
3   ccc   xx

これを、値のみにしてタイトルには別の文字列を出したいです。
タイトルと値といった形で固定値の指定はできますか?
こういう結果にしたいです。

id  name  test
1   aaa   xx
2   bbb   xx
3   ccc   xx

A 回答 (1件)

'xx'の後に「as test」を追加。


SELECT id, name, 'xx' as test FROM test_table WHERE 1
    • good
    • 0
この回答へのお礼

初歩的なことすっかり忘れてました。
思い出しました。ありがとうございます。

お礼日時:2009/05/21 09:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qアクセスで追加した項目に全て同じ値を一発で入れたい

アクセス初心者です。
既存のデータベースに1項目加えましたが、
全てのレコードに同じ値(この場合、「様」)を入れたい
のですが、エクセルのコピペのように出来ません。
既存データは2万件弱あるので1件づつ入れていくのでは
日が暮れてしまいます。

ある、項目の1列全てに同じ値を一発でいれる方法がありましたら
是非教えてください。

Aベストアンサー

回答は出ているようですが・・
更新クエリという方法もあります。
まず・・・・・・
クエリをデザインビューで作成し、テーブルは
>既存のデータベースに1項目加えましたが
とおっしゃっているテーブルを追加し、
様を入れたいフィールドをダブルクリックし、下に下ろしておきます。仮にそのフィールドが「敬称」としておきます。その後メニューバーの「クエリ」をクリックし、「更新」をクリックすると、「レコードの更新」というのが一つ増えるので、下のようにしてみてください。
------------------------------------
フィールド   敬称
テーブル    テーブル名
レコードの更新 "様"
---------------------------------------
とします。後は、名前をつけて保存をします。
すると、クエリのところに、鉛筆に「!」が付いたような絵が書かれていると思うので、それをダブルクリックし実行します。メッセージ通りに実行すれば、一度に「様」を入れてあげられると思います。
その後、邪魔であれば、新しく作ったクエリは削除してしまってもかまいません。
ヘルプで「更新クエリ」というのを検索してみてもいいかもしれません。がんばってください。

回答は出ているようですが・・
更新クエリという方法もあります。
まず・・・・・・
クエリをデザインビューで作成し、テーブルは
>既存のデータベースに1項目加えましたが
とおっしゃっているテーブルを追加し、
様を入れたいフィールドをダブルクリックし、下に下ろしておきます。仮にそのフィールドが「敬称」としておきます。その後メニューバーの「クエリ」をクリックし、「更新」をクリックすると、「レコードの更新」というのが一つ増えるので、下のようにしてみてください。
--------------------...続きを読む

Q固定値を含む結合と複数テーブルの結合について

「1.固定値を含む結合」と「2.複数テーブルの結合」について教えて下さい。

最近oracleを使い始めてSQLで表の結合を書く場面があるんですが
LEFT(RIGHT) JOIN を使うのか、(+)を使って書くのかで迷っています。

LEFT(RIGHT) JOINだと固定値を含めて外部結合しようとするとエラーになってしまいます。
それが嫌で(+)を使っていたんですが
今度は複数のテーブルを(+)で結合しようとするとエラーになってしまいます。
(AテーブルとBテーブル、AテーブルとCテーブルなど?)

こういう場合はどうすれば良いのでしょうか?
とりあえず副参照をFROMに指定して対処してるんですが
何かきちんとした書き方があるのでしょうか?誰か教えて下さい。

Aベストアンサー

 話が抽象的すぎて何を答えれば良いのか分からない・・・・ 「エラーになってしまいます。」が指す意味が分かりづらいですね。ORA-xxxxxが発生するのか、意図したレコードが抽出されないのか。もう少し具体的に書くと良いでしょう。また、その際に2テーブルの列定義(抜粋でも)やSQLのON句などは書かないと回答はつかないでしょうね。

 Oracleの10g以降を使用しているのであればもはや(+)を使う理由はありません。LEFT JOINを使うべきです。

 ところで、外部結合において良くある間違いとして以下のようなSQLがあります。ID列とNAME列があるテーブルA、Bがあり、

SELECT A.ID, B.ID, B.NAME FROM A LEFT JOIN B ON
A.ID = B.ID
AND
B.NAME = 'テスト'

というSQLを発行するとします。これは外部結合が全く意味をなさないSQLになります。これは

SELECT A.ID, B.ID, B.NAME FROM A LEFT JOIN B ON
A.ID = B.ID
AND
'テスト' = B.NAME

というSQLでないといけません。つまり、LEFT JOINのON句に指定される結合条件は、外部結合されるBが全て右側に来なくてはいけません。初歩的ですがありがちなミスなので覚えておくと良いでしょう。また、場合によってはB側をサブクエリーにするというテクニックが適用できる事もあります。

SELECT A.ID, B.ID, B.NAME FROM A
LEFT JOIN (SELECT * FROM B WHERE NAME = 'テスト') B
ON A.ID = B.ID

 話が抽象的すぎて何を答えれば良いのか分からない・・・・ 「エラーになってしまいます。」が指す意味が分かりづらいですね。ORA-xxxxxが発生するのか、意図したレコードが抽出されないのか。もう少し具体的に書くと良いでしょう。また、その際に2テーブルの列定義(抜粋でも)やSQLのON句などは書かないと回答はつかないでしょうね。

 Oracleの10g以降を使用しているのであればもはや(+)を使う理由はありません。LEFT JOINを使うべきです。

 ところで、外部結合において良くある間違いとして以下のようなS...続きを読む

QSQL SEREVER で選択した固定値との結合について質問です。

SQL SEREVER で選択した固定値との結合について質問です。

日付と紐付けたデータを1ヶ月分出力するSQLを作成しています。

紐付け対象となるデータに、1ヶ月毎日のデータが存在するわけではありません。

そこで、固定値として2010年7月であれば、
2010-07-01~2010-07-31 までの日付を全て固定値として取得
(対象データは行で取得したいのでUnionで繋いでいく)して、
その日付と紐づく対象データを外部結合しようと考えました。

SqlServerの場合、固定値のみを取得した場合
ダミーテーブルを使用するということができないようなので、
取得した固定値との紐付け時に下記???のところの指定がわかりません。

Select
'2010-07-01' 日付
Left Join
結合対象テーブル
On
結合対象テーブル.日付 = ???.日付

他のやり方で実現可能なのかもしれませんが、調べてもわかりませんでした
お解りになる方いらっしゃいましたら、教えていただければと思います。

Aベストアンサー

以下で参考になりますか?

SELECT
a.日付,
b.*
FROM (
SELECT '2010/07/01' 日付 UNION ALL
SELECT '2010/07/02' UNION ALL
SELECT '2010/07/03' UNION ALL
SELECT '2010/07/04' UNION ALL
・・・
SELECT '2010/07/31') AS a
LEFT OUTER JOIN 結合対象テーブル AS b ON b.日付=a.日付

ちなみにSQL Server 2008では以下の書き方も可能です。
SELECT
a.日付,
b.*
FROM (
VALUES
('2010/07/01'),('2010/07/02'),('2010/07/03'),
('2010/07/04'),・・・,('2010/07/31')) AS a(日付)
LEFT OUTER JOIN 結合対象テーブル AS b ON b.日付=a.日付

Q3つの表の外部結合

表A、B、Cの3つがあり、Aのすべての行を出力したいと考えています。
外部結合を用いるのだとは思うのですが、3つの表に対して行う場合の
書き方がわからず困っています。
ご教授いただけないでしょうか?
select * from a,b,c
where a.商品ID =b.商品ID (+) and b.商品ID (+) =c.商品ID (+)
としてみましたが、うまくいきませんでした。

Aベストアンサー

ansi構文の趣旨からいえば、結合条件と絞り込み条件は分けて書くので・・

select *
from a
left join b on (a.商品ID =b.商品ID)
left join c on (b.商品ID =c.商品ID)
where a.年月 = 任意の値

と書くのが一般的でしょうね。

QSELECTで1件のみ取得するには?

こんにちわ。
いまORACLE9iを使用している者です。

ACCESSでは
SELECT TOP 1 項目名 FROM テーブル名
ORDER BY 項目名;
で並べ替えたデータ群のうち,先頭の1件だけを
取ることができますが,
ORACLEでそのような機能(SQL)はあるでしょうか?
教えてください。
よろしくお願いします。

Aベストアンサー

order by と rownum を併用する場合は注意が必要です。

[tbl01]
cola | colb
------------
1000 | aaaa
1001 | bbbb

というデータがある場合、
select cola from tbl01 where rownum < 1 order by cola desc;
とすると、「1001」ではなく、「1000」が返されます。
これは、order by の前に rownum < 1 が適用されてしまうからです。

解決するには、
select aaa from (select cola aaa from tbl01 order by cola desc) where rownum = 1;
とすれば良いです。

Qテーブルからのselectにおいてデータの有無により結果をわけたい

id | point
----+-------
1 | 10
2 | 9
3 | 5
....
というテーブルがあるとします.
idを指定してpointを得たいのですが、そのidがこのテーブルに存在しない場合は空の結果ではなく0を返したいのです.
plpgsqlなどを使いif文で場合分けすればできることはわかっているのですがSQL文だけで(それもできれば1文で)これを実現する方法はあるでしょうか?
よろしくお願い致します。

Aベストアンサー

変則的ですが、これでよければidがユニークでなくても大丈夫ですし、集合関数を使わなくてもOKです。

select dm.id,case when ex1.point is null then 0 else ex1.point end from
(select ? as id) as dm left join ex1 on dm.id = ex1.id;

?を適当に変えてください。
chukenkenkouさんの発想はこれですよね。

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む

QMAX値を条件にデータを取得するには?

SQL文で困っています。
ご教授下さい。


下記のようなデータがあった場合、それぞれの区分毎に
年月が最大(最新)のデータを取得したいです。
(実際には1レコードにその他項目があり、それらも取得します。)
<検索対象データ>
区分 年月   金額
-----------------------------
A   200412  600
A   200503  560
B   200311  600
B   200508  1000
B   200504  560
C   200508  400
C   200301  1100


<取得したいデータ>

区分 年月   金額
-----------------------------
A   200503  560
B   200508  1000
C   200508  400

よろしくお願いします。

Aベストアンサー

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが)

select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A
inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月
order by B.区分

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

Q追加クエリ実行時に入力した文字を入れたい!!

みなさまおはようございます。

さっそくですが質問です。

ACCESS 2000を使用しています、

追加クエリを作成したんですが、
実行時、日付型のとある項目に、
テーブルから取得した項目ではなく、クエリ実行時に入力させた値を格納したいのですがどうしたらよろしいでしょうか?

Aベストアンサー

> 追加先の項目の型が日付型になっています。
> 入力された値が「2004/09/02」だったとして
> それをFormat関数をとおして「20040902」としたいのですが、フィールドを

入力を、「20040902」のようにして、実際は日付/時刻型のフィールドへ
追加したいということですよね?

でしたら、以下の式にしてみてください。

CDate(Format([対象年月を入力してくだいさ。],"@@@@/@@/@@"))


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報