如何在 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
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