簡體   English   中英

從一個具有不同值的表中多次選擇一列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM