[英]Selecting one column multiple times from a single table with different values
嗨,我有一個問題,因為我被困在其中一個SQL查詢中。 我寫了這個SQL查詢:
SELECT DISTINCT Date(createddate) as Date,
(SELECT maxage FROM wob_stock_age
WHERE (maxage = a.maxage) AND (totetype='B')
GROUP BY Date)AS Blue,
(SELECT maxage FROM wob_stock_age
WHERE (maxage = a.maxage) AND (totetype='V')
GROUP BY Date)AS Yellow,
(SELECT maxage FROM wob_stock_age
WHERE (maxage = a.maxage) AND (totetype='N')
GROUP BY Date)AS Pink
FROM wob_stock_age as a
如您所見,我在不同的別名下多次選擇同一列。 但是結果不是我期望的,因為我得到了Null值。
更新:實際上,我想為每個日期獲取一行,並希望為某一日期獲取所有“ totetype”粉色,藍色和黃色。 而不是一個日期的3行。
所以結果是
|Date |Blue|Yellow|Pink|
------------------------------
|2016-02-16 |153 |27 |40 |
------------------------------
|2016-02-17 |152 |26 |40 |
您可以使用條件聚合來做到這一點。 您的問題尚不清楚,但是我對您要執行的操作的最佳猜測是:
SELECT maxage,
SUM(CASE WHEN totetype = 'B' THEN 1 ELSE 0 END) as Blue,
SUM(CASE WHEN totetype = 'V' THEN 1 ELSE 0 END) as Yellow,
SUM(CASE WHEN totetype = 'N' THEN 1 ELSE 0 END) as Pink
FROM wob_stock_age as a
GROUP BY maxage
ORDER BY maxage ;
使用OUTER APPLY
SELECT DISTINCT Date(createddate) as [Date],
BlueTable.Blue,
YellowTable.Yellow,
PinkTable.Pink
FROM wob_stock_age as a
OUTER APPLY (
SELECT maxage as Blue
FROM wob_stock_age
WHERE (maxage = a.maxage) AND (totetype='B')
--GROUP BY Date
)BlueTable
OUTER APPLY
(
SELECT maxage as Yellow
FROM wob_stock_age
WHERE (maxage = a.maxage) AND (totetype='V')
--GROUP BY Date
)YellowTable
OUTER APPLY(
SELECT maxage AS Pink
FROM wob_stock_age
WHERE (maxage = a.maxage) AND (totetype='N')
--GROUP BY Date
)PinkTable
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.