[英]MySQL Query, Pivoting Table
我在建立將我的行旋轉為列的查詢時遇到了麻煩。 我的數據透視表是我的DATE。 用戶需要的是查看整周的數據。
我的數據是這樣構造的:
ID - AssemblyDate
----------------------------------
12345 - 2015-01-01
12346 - 2015-01-01
12347 - 2015-01-01
12348 - 2015-01-02
12349 - 2015-01-02
12350 - 2015-01-02
12351 - 2015-01-03
12352 - 2015-01-03
12353 - 2015-01-03
我期望的結果將是這樣的
DAY1 - DAY2 - DAY3
12345 12348 12351
12346 12349 12352
12347 12350 12352
我嘗試過的東西:
SELECT CASE WHEN (AssemblyDate = '2015-01-01') THEN ID ELSE NULL END AS DAY1
, CASE WHEN (AssemblyDate = '2015-01-02') THEN ID ELSE NULL END AS DAY2
, CASE WHEN (AssemblyDate = '2015-01-03') THEN ID ELSE NULL END AS DAY3
FROM MyTable
GROUP BY AssemblyDate
這給了我這樣的東西:
DAY1 - DAY2 - DAY3
12345 NULL NULL
12346 NULL NULL
12347 NULL NULL
NULL 12348 NULL
NULL 12349 NULL
NULL 12350 NULL
NULL NULL 12351
NULL NULL 12352
NULL NULL 12352
但是我不想要空值...有沒有一種方法可以讓我將它們設為空值?
您需要做些擺弄,因為您需要進一步將這些結果分組。 由於沒有什么可分組的,因此我們需要設計一些用於分組的東西-在這種情況下,每列一個變量,只要該列與裝配日期匹配,我們就會增加該變量:
select if(assemblydate = '2015-01-01', @d1c := @d1c +1,
if(assemblydate = '2015-01-02', @d2c := @d2c + 1, @d3c := @d3c +1)) id,
case when assemblydate = '2015-01-01' then id end d1,
case when assemblydate = '2015-01-02' then id end d2,
case when assemblydate = '2015-01-03' then id end d3
from d, (select @d1c := 0, @d2c := 0, @d3c := 0) q;
該查詢僅添加一個id列,該列每天遞增,結果如下所示。
+------+-------+-------+-------+
| id | d1 | d2 | d3 |
+------+-------+-------+-------+
| 1 | 12345 | NULL | NULL |
| 2 | 12346 | NULL | NULL |
| 3 | 12347 | NULL | NULL |
| 1 | NULL | 12348 | NULL |
| 2 | NULL | 12349 | NULL |
| 3 | NULL | 12350 | NULL |
| 1 | NULL | NULL | 12351 |
| 2 | NULL | NULL | 12352 |
| 3 | NULL | NULL | 12352 |
+------+-------+-------+-------+
完成后,我們只需要對結果進行另一個查詢,將ID分組即可,並使用max()
不為null的值
select max(d1), max(d2), max(d3) from
(
select if(assemblydate = '2015-01-01', @d1c := @d1c +1,
if(assemblydate = '2015-01-02', @d2c := @d2c + 1, @d3c := @d3c +1)) id,
case when assemblydate = '2015-01-01' then id end d1,
case when assemblydate = '2015-01-02' then id end d2,
case when assemblydate = '2015-01-03' then id end d3
from d, (select @d1c := 0, @d2c := 0, @d3c := 0) q
) qq
group by id;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.