如何在 SQL Server 2008 中计算一行

How to get count in one row in SQL Server 2008

SELECT 
    ROW_NUMBER() OVER (PARTITION BY A.Inq_Inquiry_Kid ORDER BY A.Inq_InquiryDate) AS RN,
    A.Inq_Inquiry_No,
    COUNT(d.Inq_ConLengthId)
    CASE 
       WHEN d.Inq_ConLengthId = 113 
          THEN CONVERT(varchar(10), COUNT(d.Inq_ConLengthId)) 
          ELSE ''  
    END AS Length20,
    CASE 
       WHEN d.Inq_ConLengthId <> 113 
          THEN CONVERT(varchar(10), COUNT(d.Inq_ConLengthId)) 
          ELSE ''  
    END AS Length40
FROM 
    Inquiry.tbl_SE_InquiryEntry A
LEFT JOIN 
    Inquiry.tbl_SE_ContainerType d ON A.Inq_Inquiry_Kid = d.Inq_InquiryId
WHERE 
    a.Inq_Inquiry_No = 'BOM/CRM/00047'
GROUP BY
    A.Inq_Inquiry_No, A.Inq_Inquiry_Kid, A.Inq_InquiryDate,
    d.Inq_ConLengthId

运行 这个查询我得到这个结果:

RN  Inq_Inquiry_No  Length20    Length40
-------------------------------------------------
1   BOM/CRM/00047     1 
2   BOM/CRM/00047                  1

但我想要这个结果:

RN  Inq_Inquiry_No  Length20    Length40
-------------------------------------------------
1   BOM/CRM/00047     1           1

我正在使用 RN=1 然后我得到这个不正确的结果:

RN  Inq_Inquiry_No  Length20    Length40
-------------------------------------------------
1   BOM/CRM/00047     1 

请帮帮我

从分组中删除Inq_ConLengthId,并使用条件聚合:

SELECT 
    ROW_NUMBER() OVER (PARTITION BY A.Inq_Inquiry_Kid ORDER BY A.Inq_InquiryDate) AS RN,
    A.Inq_Inquiry_No,
    COUNT(d.Inq_ConLengthId)
    COUNT(CASE 
       WHEN d.Inq_ConLengthId = 113 
          THEN 1 END) AS Length20,
    COUNT(CASE 
       WHEN d.Inq_ConLengthId <> 113 
          THEN 1 END) AS Length40
FROM 
    Inquiry.tbl_SE_InquiryEntry A
LEFT JOIN 
    Inquiry.tbl_SE_ContainerType d ON A.Inq_Inquiry_Kid = d.Inq_InquiryId
WHERE 
    a.Inq_Inquiry_No = 'BOM/CRM/00047'
GROUP BY
    A.Inq_Inquiry_No, A.Inq_Inquiry_Kid, A.Inq_InquiryDate