如何限制虚拟计算列?

时间:2016-03-22 17:36:34

标签: sql-server-2008-r2

我想在我的sql查询中限制虚拟计算列。我不知道该怎么做。 这是我的查询

select Distinct(Chief_Complaint), COUNT(Chief_Complaint) as 'No. of Cases
Encountered(January)',  COUNT(Chief_Complaint) as 'No. of Cases Encountered(February)'
from Medical_Treatment
group by Chief_Complaint

列Chief_Complaint是一个字符串

我想在COUNT(Chief_Complaint)中添加限制为'否。遇到的案件(一月)'这样它只会计算从我的日期列开始的1月份的不同值的数量,以及COUNT(Chief_Complaint)中的不同值的数量为'否。遇到的案件(二月)'哪个月是二月 那可能吗?对不起我的英文

感谢您的回复。

1 个答案:

答案 0 :(得分:0)

这样的事情会对你有用吗。

CREATE TABLE #Complaint(
     id                 INT IDENTITY(1,1)
    ,Chief_Complaint    NVARCHAR(100)
    ,ComplaintDate      DATETIME
)

INSERT INTO #Complaint
    ( Chief_Complaint, ComplaintDate)
VALUES
     ( 'Complaint1', '20160101')
    ,( 'Complaint1', '20160101')
    ,( 'Complaint1', '20160101')
    ,( 'Complaint2', '20160101')
    ,( 'Complaint2', '20160101')
    ,( 'Complaint3', '20160101')

    ,( 'Complaint1', '20160201')
    ,( 'Complaint1', '20160201')
    ,( 'Complaint2', '20160201')
    ,( 'Complaint2', '20160201')
    ,( 'Complaint2', '20160201')


;WITH cteComplaints
AS(
    SELECT
        C.Chief_Complaint
        ,CASE WHEN DATENAME( month, C.ComplaintDate ) = 'January'
            THEN COUNT( C.Chief_Complaint)
         END    'January_CASES'
        ,CASE WHEN DATENAME( month, C.ComplaintDate ) = 'February'
            THEN COUNT( C.Chief_Complaint)
         END    'February_CASES'
    FROM
        #Complaint C
    GROUP BY
        C.Chief_Complaint,DATENAME( month, C.ComplaintDate )
)
SELECT
    C.Chief_Complaint
    ,SUM(ISNULL(C.January_CASES,0)) 'January_CASES'
    ,SUM(ISNULL(C.February_CASES,0)) 'February_CASES'
FROM
    cteComplaints   C
GROUP BY
    C.Chief_Complaint

DROP TABLE #Complaint