0

この SQL 入力テーブルが与えられた場合

GroupId   Item
1         Fish
1         FishBowl
2         Fish
3         Fish

この出力をどのように導出できますか?

Item     IsInGroup1   IsInGroup2   IsInGroup3
Fish     Y            Y            Y
FishBowl Y            N            N

グループ数は可変であることに注意してください

4

3 に答える 3

2

一般に、標準SQLでは可変数のグループを実行できません。事前にグループを知っておく必要があります。これは、SQLクエリが列の数とその名前を知っている必要があるためです。

SELECT Item, 
  MAX(CASE GroupId WHEN 1 THEN 'Y' ELSE 'N' END) AS IsInGroup1, 
  MAX(CASE GroupId WHEN 2 THEN 'Y' ELSE 'N' END) AS IsInGroup2, 
  MAX(CASE GroupId WHEN 3 THEN 'Y' ELSE 'N' END) AS IsInGroup3
FROM ThisInputTable
GROUP BY Item;

Microsoft SQL Serverにはピボットテーブル用の機能がいくつかありますが、これは標準のSQLではありません。私はMicrosoftユーザーではないので、「 PIVOTとUNPIVOTの使用」へのリンクを提供し、残りはあなたに任せます。

于 2009-06-16T00:29:12.923 に答える
1

SOに関する最も よくある 質問 の 1 つです。

基本的に、動的 SQL を使用して、グループの数と各グループの名前を決定することにより、Bill Karwin が提供する形式のクエリを作成できます。生成するこのようなクエリは、ANSI SQL にすることができます。Bill が言及した SQL Server 2008 (2005 以降) の PIVOT 演算子の独自の構文を生成することもできます。

最初のリンクでの私の例はかなり明確なはずです。

于 2009-06-16T00:56:43.060 に答える
0

まあ、それはあなたが使用しているデータベースに依存すると思います。これは私のために働きます:

SELECT Item、IF(GroupId = 1、'Y'、'N')As IsInGroup1、IF(GroupId = 2、'Y'、'N')As IsInGroup2、IF(GroupId = 3、'Y'、'N')As IsInGroup3 FROMGROUPBY New Table アイテム;

于 2009-06-16T00:30:23.310 に答える