1

こんにちは、特定の行情報 (青と赤) に基づいて複数の列からデータを取得し、行の条件ごとに異なる列を返す方法を教えてください。

例 :

Table_Colours から

ID |  Code Type  | Code
1  |  Blue       | Blue1XX
2  |  Red        | Red1XX
2  |  Blue       | Blue1XX
3  |  Red        | Red1XX
4  |  Blue       | Blue1XX
4  |  Red        | Red1XX
5  |  Blue       | Blue1XX

私は戻る必要があります

ID | Blue     | Red   
1  | Blue1XX  |        
2  | Blue1XX  | Red1XX
3  |          | Red1XX
4  | Blue1XX  | Red1XX
5  | Blue1XX  |      

青は常に Blue1XX (6 桁のコード) を返します 赤は常に Red1XX (5 桁のコード) を返します

次のような特定の ID 文字列で検索する必要があります。

AND ID IN (
'1',
'2',
'3',
'4',
)

どんな助けでも大歓迎です。

4

3 に答える 3

0

これは、ID と特定の CodeType に一致するものが 1 つしかないか、まったくないことを前提としています。また、MySQL を想定しています。SQL SERVER を使用している場合は、削除してそれぞれの直後に配置しLIMIT 1ますTOP 1SELECT

SELECT DISTINCT ID, 
       (SELECT Code FROM MyTable AS T1 
        WHERE T1.ID=T0.ID AND T1.`Code Type`='Blue' LIMIT 1) AS BlueCode,
       (SELECT Code FROM MyTable AS T2 
        WHERE T2.ID=T0.ID AND T2.`Code Type`='Red' LIMIT 1) AS RedCode
FROM MyTable T0
WHERE T0.ID IN ('1','2','3')
ORDER BY T0.ID
于 2012-07-25T14:19:33.160 に答える
0
WITH pair AS (
        WITH red AS (
                SELECT id,  zcode FROM table_colours WHERE code_type = 'Red'
                )
        , blue AS (
                SELECT id,  zcode FROM table_colours WHERE code_type = 'Blue'
                )
        SELECT COALESCE(b.id, r.id) AS id
                , b.zcode AS blue
                , r.zcode AS red
        FROM blue b
        FULL JOIN red r ON r.id = b.id
        )
SELECT * FROM pair
WHERE id IN (1,2,3,4)
        ;

結果:

 id |  blue   |  red   
----+---------+--------
  1 | Blue1XX | 
  2 | Blue1XX | Red1XX
  4 | Blue1XX | Red1XX
  3 |         | Red1XX
(4 rows)

注: mysql タグは後で追加されました。(mysql は CTE を許可しません)

OPへ:「それはmysqlです」と以前に言ったはずです。その場合、CTEベースの回答を作成する必要はありませんでした。

于 2012-07-25T14:57:29.147 に答える
-1

これを試して:

select id, code as 'Blue', null as 'Red'
from table
where code_type like 'Blue'

union

select id, null as 'Blue', code as 'Red'
from table
where code_type like 'Red'
于 2012-07-25T14:16:32.120 に答える