1

私は定義しました:
テーブルX

ID    AGE    HEIGHT   REGISTERED
1     23     1.83     1
2     24     1.81     0
3     24     1.72     0
4     22     1.91     1
5     32     1.76     0

そして、有効な値を返すクエリを実行したいと思いますが*ONLY*、登録された ID に対してです。そうでない人は、見返りに0を取得します。このような:

結果

ID    AGE    HEIGHT   REGISTERED
1     23     1.83     1
2     0      0        0
3     0      0        0
4     22     1.91     1
5     0      0        0

そのクエリを定義する方法は何ですか?

4

3 に答える 3

4

MySQL 固有のIF式を使用できます。

SELECT 
    ID,
    IF(REGISTERED, AGE, 0) AS AGE,
    IF(REGISTERED, HEIGHT, 0) AS HEIGHT,
    REGISTERED
FROM tablex

オンラインで動作することを確認してください: sqlfiddle

標準の SQLCASE式を使用することもできます。

SELECT 
    ID,
    CASE WHEN REGISTERED = 1 THEN AGE ELSE 0 END AS AGE,
    CASE WHEN REGISTERED = 1 THEN HEIGHT ELSE 0 END AS HEIGHT,
    REGISTERED
FROM tablex

あなたのコメントに応えて、列がたくさんある場合に少し簡単になるかもしれないもう1つの方法を次に示します。

SELECT id, AGE, HEIGHT, REGISTERED
FROM tablex
WHERE REGISTERED

UNION ALL

SELECT id, 0, 0, 0
FROM tablex
WHERE NOT REGISTERED

ORDER BY ID

オンラインで動作することを確認してください: sqlfiddle

このクエリの列リストは just に短縮できSELECT *、クエリは引き続き機能することに注意してください。しかしSELECT *、サイトの他の場所で説明されているさまざまな理由から、製品コードでの使用はお勧めできません。

于 2012-07-18T22:35:11.337 に答える
1

SQLでIFを使用できます

SELECT
  ID,
  IF(REGISTERED = 1, AGE, 0) AS AGE,
  IF(REGISTERED = 1, HEIGHT, 0) AS HEIGHT,
  REGISTERED
FROM TableX
于 2012-07-18T22:36:05.843 に答える
0

これを行うこともできます

SELECT ID, Age, Height, Registered FROM ( SELECT ID, Age, Height, Registered FROM TableX WHERE Registered = 1 UNION ALL SELECT ID, 0 AS Age, 0 AS Height, Registered FROM TableX WHERE Registered = 0 ) ORDER BY ID

于 2012-07-18T22:56:07.910 に答える