我想计算参考编号和每个许可证ex。 BP,AP,OP
我的示例查询
SELECT
C.CompanyName,
A.ReferenceNumber,
Count(CR.BP,
CR.AP,
CR.SP,
CR.FP,
CR.EP,
CR.ELP,
CR.MP,
CR.EGPP,
CR.OP,
CR.EPTO,
CR.ELPTO,
CR.MPTO,
CR.FSIC,
CR.AI,
CR.EPTO_R,
CR.ELPTO_R,
CR.MPTO_R,
CR.LOA)
From Companies AS C
inner join ApplicationDetails as A on(C.CompanyId = A.CompanyID)
inner join CertificateRecords as CR on(A.ReferenceNumber = CR.ReferenceNumber)
group by A.ReferenceNumber
ERROR是Count函数需要1个参数。
答案 0 :(得分:0)
Count
指的是行,而不是列
因此,在多列上使用它是没有意义的
您可以使用列名,星号或常量(最后2个是等效的)
这些选项的原因是count
忽略null
值 - 因此您可以通过两种不同的方式使用它。
使用列名时,您将获得该列中的值数(如果您将其与group by
一起使用,则为每个组。请注意,此处null
不被视为值,因此如果您的列可以为空,那么您将只获得不是null
的行数。
使用星号或常量时,count
不会忽略null
值,即使行中的所有列都包含null
- 该行仍会被计算。
以下是我演示的快速演示:
DECLARE @T AS TABLE
(
col1 int NULL,
col2 int NULL
)
INSERT INTO @T VALUES
(1,1),
(1,2),
(1,3),
(1, NULL),
(2,1),
(2,2),
(2,3),
(2, NULL),
(NULL, 1),
(NULL, 2),
(NULL, 3),
(NULL, NULL)
使用所有选项计数:
SELECT col1,
COUNT(col2) As ColumnName,
COUNT(*) Asterisk,
COUNT(1) Constant
FROM @T
GROUP BY col1
结果:(请注意,列名称的列会忽略null
行)
col1 ColumnName Asterisk Constant
NULL 3 4 4
1 3 4 4
2 3 4 4
将count(*)
与count(1)
进行比较:
SELECT COUNT(*) Asterisk,
COUNT(1) Constant
FROM @T
结果:
Asterisk Constant
12 12