2012-02-14 9 views
0

私は非常にSQLに新しいですし、このような複雑なことは一度もありません。どんな助けもありがとう。複数の行を1つの行にマージするためのテーブルの自己結合

私は、テーブル内のデータを次のようしている。

ID - TAG 
1 - U 
1 - N 
1 - U 
1 - N 
1 - U 

私の出力は基本的に私の出力は、IDのNさんとUさんをカウントし、そのための単一の行を生成するために必要

ID - U - N 
1 - 3 - 2 

にする必要がありますID。

お時間をいただきありがとうございます。

+1

DBMSとは何ですか? MySQL? –

+1

あなたはどのデータベースを使用していますか? – Thilo

答えて

2
SELECT 
    ID, 
    COUNT(CASE WHEN TAG = 'U' THEN 1 END) AS [U], 
    COUNT(CASE WHEN TAG = 'N' THEN 1 END) AS [N] 
FROM 
    someTable 
GROUP BY 
    ID 

UPDATE:

別のポスター(下記参照)私はいくつかのRDBMSは、二重引用符を必要とし、角括弧を使用していることを指摘しています。

+0

+1どこでも動作するはずの一般的なソリューションです。あなたは、標準的な引用ではなくSQL Serverの引用規約を使用していることに注意してください。ありがとう。 –

+0

ありがとうございます。私は気づかなかった(トンネルビジョン)。 –

+0

私は '[U]'と '[N]'について話していましたが、標準のSQLでは引用符付きの識別子に '' U "'と '" N "'が必要です。私は誰もが文字列リテラルのための単一引用符で満足していることを確かめている(または少なくとも私はそう望む)。しかし、ええ、トンネルのビジョン:) –

1

MySQLでは、これはあなたがIDごとに、基本的に:)

select id, 
    sum(if(tag = 'U', 1, 0)) as U, 
    sum(if(tag = 'N', 1, 0)) as N 
from table1 
group by id 

を考えるよりもsimplierであるあなたはどうか、タグに基づいて、1または0を持つことになり、新しい列(UとN)を作成してもらいます値「U」または「N」を持ちます。これは、このようなものになり:

+----+---+---+ 
| ID | U | N | 
+----+---+---+ 
| 1 | 1 | 0 | 
| 1 | 0 | 1 | 
| 1 | 1 | 0 | 
| 1 | 0 | 1 | 
| 1 | 1 | 0 | 
+----+---+---+ 

、私たちがしなければならないすべてはIDと和でUとNからのすべての値のグループであり、我々が得る:このことができます

+----+---+---+ 
| ID | U | N | 
+----+---+---+ 
| 1 | 3 | 2 | 
+----+---+---+ 

希望を。

関連する問題