簡體   English   中英

從Sql表計數不同的值

[英]Counting Distinct values from Sql Table

以下是我桌子的視圖...

在此處輸入圖片說明

我很難從查詢中獲得想要的結果。

我的要求如下圖所示

在此處輸入圖片說明

它應滿足以下條件:1)在開始日期和結束日期之內。

2)沒有待定。

3)是的。

4)否+是總計。

5)僅基於一種調查類型。

這是我為上面提到的1到4條件嘗試過的結果,但是如何隱含5條件呢?

SELECT DISTINCT Userid
  ,CASE 
    WHEN [YES] IS NULL
      THEN 0
    ELSE [YES]
    END AS Completed
  ,CASE 
    WHEN [NO] IS NULL
      THEN 0
    ELSE [NO]
    END AS Pending
  ,(
    CASE 
      WHEN [YES] IS NULL
        THEN 0
      ELSE [YES]
      END + CASE 
      WHEN [NO] IS NULL
        THEN 0
      ELSE [NO]
      END
    ) AS Total
FROM (SELECT DISTINCT Userid
    ,SurveyStatus
    ,COUNT(ParcelId) AS cnt
  FROM ParcelAllocationsurvivor
  WHERE DateAllocated >= '2013-08-01'
    AND DateAllocated <= '2013-08-07'
  GROUP BY Userid
    ,SurveyStatus
  ) AS p
PIVOT(max(cnt) FOR surveystatus IN ([YES],[NO])) AS pvt
ORDER BY Userid

有人可以幫我嗎?

提前致謝////

您可以在子查詢中添加where子句:

SELECT Userid, (case when [YES] is null then 0 else [YES] end) as Completed,
       (case when [NO] is null then 0 else [NO] end) as Pending,
       (case when [YES] is null then 0 else [YES] end +
        case when [NO] is null then 0 else [NO] end
       ) as Total
FROM (SELECT Userid, SurveyStatus, COUNT(ParcelId) as cnt 
      FROM ParcelAllocationsurvivor
      WHERE DateAllocated >= '2013-08-01' and DateAllocated <='2013-08-07' and
            SurveyType = 'Survey1'
      group by Userid, SurveyStatus
     ) AS p
PIVOT(max(cnt) FOR surveystatus IN([YES],[NO])) AS pvt order by Userid;

順便說一句, select distinct是多余的。 您不需要此查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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