Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
此select语句的正确sql脚本是什么?_Sql_Sql Server_Sql Server 2000_Pivot - Fatal编程技术网

此select语句的正确sql脚本是什么?

此select语句的正确sql脚本是什么?,sql,sql-server,sql-server-2000,pivot,Sql,Sql Server,Sql Server 2000,Pivot,这是我的剧本 SELECT iBranch_num, CASE WHEN iPatient_typ=1 THEN COUNT(iPatient_num) ELSE 0 END AS [New Patient], CASE WHEN iPatient_typ=2 THEN COUNT(iPatient_num) ELSE 0 END AS [Buying Patient], CASE WHEN iPatient_typ=3 THEN COUNT(

这是我的剧本

SELECT iBranch_num,
   CASE WHEN iPatient_typ=1 THEN COUNT(iPatient_num) ELSE 0 END AS [New Patient], 
   CASE WHEN iPatient_typ=2 THEN COUNT(iPatient_num) ELSE 0 END AS [Buying Patient],                
   CASE WHEN iPatient_typ=3 THEN COUNT(iPatient_num) ELSE 0 END AS [Active Patient],
   CASE WHEN iPatient_typ=4 THEN COUNT(iPatient_num) ELSE 0 END AS [Inactive Patient]
FROM tblsotransaction
WHERE iStatus_typ=1
   AND iApply_dt BETWEEN 20130401 AND 20130408 
   AND iBranch_num=14
GROUP BY iBranch_num, iPatient_typ
当前结果:

14, 25, 0,  0,  0
14, 0,  8,  0,  0
14, 0,  0,  97, 0
14, 0,  0,  0,  2
我希望结果是这样的

14, 25, 8,  9,  2

将整个
CASE
表达式包装在聚合函数
COUNT
中,并从
GROUP BY
子句中删除
iPartient\u typ

SELECT 
  iBranch_num,
  COUNT(CASE WHEN iPatient_typ=1 THEN iPatient_num ELSE 0 END) AS [New Patient], 
  COUNT(CASE WHEN iPatient_typ=2 THEN iPatient_num ELSE 0 END) AS [Buying Patient],                
  COUNT(CASE WHEN iPatient_typ=3 THEN iPatient_num ELSE 0 END) AS [Active Patient],
  COUNT(CASE WHEN iPatient_typ=4 THEN iPatient_num ELSE 0 END) AS [Inactive Patient]
FROM tblsotransaction
WHERE iStatus_typ = 1 
  AND iApply_dt BETWEEN 20130401 AND 20130408 
  AND iBranch_num = 14
GROUP BY iBranch_num;
或:
求和

SELECT 
  iBranch_num,
  SUM(CASE WHEN iPatient_typ = 1 THEN 1 ELSE 0 END) AS [New Patient], 
  SUM(CASE WHEN iPatient_typ = 2 THEN 1 ELSE 0 END) AS [Buying Patient],
  SUM(CASE WHEN iPatient_typ = 3 THEN 1 ELSE 0 END) AS [Active Patient],
  SUM(CASE WHEN iPatient_typ = 4 THEN 1 ELSE 0 END) AS [Inactive Patient]
FROM tblsotransaction
WHERE iStatus_typ = 1 
  AND iApply_dt BETWEEN 20130401 AND 20130408 
  AND iBranch_num = 14
GROUP BY iBranch_num;

您正在使用什么RDBMS?是SQL server吗?我得到了与此相同的结果acript@odlanyer-抱歉,从
GROUP BY
子句中删除
iPartient\u typ
,我更新了我的答案。无法对包含聚合或子查询的表达式执行聚合函数。在您的第二个答案中,结果正确,但计数是三倍!