0

私はこのSQLクエリで本当に悪い問題を抱えています. 私のテーブルに基づいて、次の結果のようなものが必要です:

table1

Id | Type | Size |Count | OwnerId
___________________________________
1     A      1      12      1
2     A      2      12      1
3     B      1      14      1
4     B      1      20      1
5     A      1      12      2
6     A      1      17      2

テーブル2

Id | name
_________
1     A
2     B

結果

______________________
Name |  Size1Type1 Count |  Size2Type1 Count |  Size1Type2 Count

本当にありがとう。

4

2 に答える 2

2

CASE使用しているRDBMSを指定していませんが、ステートメントを使用して集計関数を実装することで結果を取得できるはずです。PIVOTこのプロセスは:に似ています。

select t2.name,
  sum(case when t1.size = 1 and t1.type = 'a' then 1 else 0 end) Size1Type1Count,
  sum(case when t1.size = 2 and t1.type = 'a' then 1 else 0 end) Size2Type1Count,
  sum(case when t1.size = 1 and t1.type = 'b' then 1 else 0 end) Size1Type2Count,
  sum(case when t1.size = 2 and t1.type = 'b' then 1 else 0 end) Size2Type2Count
from table1 t1
inner join table2 t2
  on t1.ownerid = t2.id
group by t2.name

SQL FiddlewithDemoを参照してください

結果:

| NAME | SIZE1TYPE1COUNT | SIZE2TYPE1COUNT | SIZE1TYPE2COUNT | SIZE2TYPE2COUNT |
--------------------------------------------------------------------------------
|    A |               1 |               1 |               2 |               0 |
|    B |               2 |               0 |               0 |               0 |

countフィールドを含める場合は、次のようなものを使用します。

select t2.name,
  sum(case when t1.size = 1 and t1.type = 'a' then "Count" end) Size1Type1Count,
  sum(case when t1.size = 2 and t1.type = 'a' then "Count" end) Size2Type1Count,
  sum(case when t1.size = 1 and t1.type = 'b' then "Count" end) Size1Type2Count,
  sum(case when t1.size = 2 and t1.type = 'b' then "Count" end) Size2Type2Count
from table1 t1
inner join table2 t2
  on t1.ownerid = t2.id
group by t2.name;

SQL FiddlewithDemoを参照してください

結果:

| NAME | SIZE1TYPE1COUNT | SIZE2TYPE1COUNT | SIZE1TYPE2COUNT | SIZE2TYPE2COUNT |
--------------------------------------------------------------------------------
|    A |              12 |              12 |              34 |          (null) |
|    B |              29 |          (null) |          (null) |          (null) |

または、テーブルに対して複数の結合を実行して、必要な結果を得ることができます。

select t2.name, 
  sum(t1_a1."count") Size1Type1Count,
  sum(t1_a2."count") Size2Type1Count,
  sum(t1_b1."count") Size1Type2Count,
  sum(t1_b2."count") Size2Type2Count
from table2 t2
left join table1 t1_a1
  on t1_a1.ownerid = t2.id
  and t1_a1.size = 1 
  and t1_a1.type = 'a'
left join table1 t1_a2
  on t1_a2.ownerid = t2.id
  and t1_a2.size = 2
  and t1_a2.type = 'a'
left join table1 t1_b1
  on t1_b1.ownerid = t2.id
  and t1_b1.size = 1
  and t1_b1.type = 'b'
left join table1 t1_b2
  on t1_b2.ownerid = t2.id
  and t1_b2.size = 2
  and t1_b2.type = 'b'
group by t2.name

SQL FiddlewithDemoを参照してください

于 2012-12-01T12:35:50.053 に答える
0
SELECT Name, Type, Size, SUM(Count) AS 'Count' FROM Table1, Table2
WHERE Table1.OwnerID = Tabel2.Id
GROUP BY Name, Type, Size
于 2012-12-01T12:40:01.247 に答える