Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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
Sql 选择“按否计数列组”_Sql_Sql Server - Fatal编程技术网

Sql 选择“按否计数列组”

Sql 选择“按否计数列组”,sql,sql-server,Sql,Sql Server,我需要有关此问题的帮助,如何在3列中返回计数>> 例: 您可以尝试以下方法:- Emp_No Count Al Count S Count H 500 2 1 0 600 1 1 1 这会奏效的。您必须为每个条件提供单独的案例说明 SQLFIDDLE用于相同的 使用枢轴: SELECT EMP_NO, sum(CASE WHEN

我需要有关此问题的帮助,如何在3列中返回计数>> 例:

您可以尝试以下方法:-

Emp_No    Count Al    Count S    Count H
500         2            1           0
600         1            1           1

这会奏效的。您必须为每个条件提供单独的案例说明 SQLFIDDLE用于相同的

使用枢轴:

    SELECT EMP_NO, 
           sum(CASE WHEN Emp_Shift = 'AL' THEN 1 ELSE 0 END) AS COUNT_AL,
           sum(CASE  WHEN Emp_Shift = 'S' THEN 1 ELSE 0 END) AS COUNT_S,
           sum(CASE  WHEN Emp_Shift = 'H' THEN 1 ELSE 0 END) AS COUNT_H
FROM YOUR_TABLE
GROUP BY EMP_NO;
在动态查询中使用Pivot:

declare @YOUR_TABLE TABLE 
    ([Emp_No] int, [Emp_Shift] varchar(2), [Emp_Date] datetime)
;

INSERT INTO @YOUR_TABLE
    ([Emp_No], [Emp_Shift], [Emp_Date])
VALUES
    (500, 'AL', '2015-01-05 00:00:00'),
    (600, 'S', '2015-02-05 00:00:00'),
    (600, 'H', '2015-03-05 00:00:00'),
    (500, 'S', '2015-04-05 00:00:00'),
    (500, 'AL', '2015-05-05 00:00:00'),
    (600, 'AL', '2015-06-05 00:00:00')
;
select Emp_No,[AL] AS [Count Al],[S] As [Count S],[H] AS [Count H] from (
select Emp_No,[Emp_Shift],[Emp_Date] from @YOUR_TABLE)T
PIVOT(COUNT(Emp_Date) FOR Emp_Shift IN ([AL],[S],[H]))P

google SQL SERVER PIVOTOr方法总是有这样的情况:
count(当emp_shift='AL'然后1 else null end时的情况)作为…
@IbrahimMAl Mahareq很高兴它有帮助:)sorry:(它返回与此相同的值556 Ismail Abdallah Ahmad Abu Awad 583 583//348 Antoun Basil Zuroub 27272727@IbrahimMAl-Mahareeq检查编辑后的答案…替换sum而不是countSum是的,它可以工作..非常感谢你@ameya deshpande u r my Hero:))@易卜拉欣马尔·马哈雷克快乐编码:)@AnkitBajpai:我认为你需要使用
sum
而不是
count
。无论其值是1还是0,它都将计数。不确定?尝试运行此
Select COUNT(当1=1然后0 else 1 end时的情况)
您可以使用
sum 1 else 0
COUNT 1 else null
,它们将给出相同的结果。此外,您不能像正在尝试的那样在一条语句中派生3列,您必须有3个单独的表达式。
    SELECT EMP_NO, 
           sum(CASE WHEN Emp_Shift = 'AL' THEN 1 ELSE 0 END) AS COUNT_AL,
           sum(CASE  WHEN Emp_Shift = 'S' THEN 1 ELSE 0 END) AS COUNT_S,
           sum(CASE  WHEN Emp_Shift = 'H' THEN 1 ELSE 0 END) AS COUNT_H
FROM YOUR_TABLE
GROUP BY EMP_NO;
declare @YOUR_TABLE TABLE 
    ([Emp_No] int, [Emp_Shift] varchar(2), [Emp_Date] datetime)
;

INSERT INTO @YOUR_TABLE
    ([Emp_No], [Emp_Shift], [Emp_Date])
VALUES
    (500, 'AL', '2015-01-05 00:00:00'),
    (600, 'S', '2015-02-05 00:00:00'),
    (600, 'H', '2015-03-05 00:00:00'),
    (500, 'S', '2015-04-05 00:00:00'),
    (500, 'AL', '2015-05-05 00:00:00'),
    (600, 'AL', '2015-06-05 00:00:00')
;
select Emp_No,[AL] AS [Count Al],[S] As [Count S],[H] AS [Count H] from (
select Emp_No,[Emp_Shift],[Emp_Date] from @YOUR_TABLE)T
PIVOT(COUNT(Emp_Date) FOR Emp_Shift IN ([AL],[S],[H]))P
if object_id('tempdb..#t') is not null
    drop table #t

CREATE  TABLE #t
    ([Emp_No] int, [Emp_Shift] varchar(2), [Emp_Date] datetime)
;

INSERT INTO #t
    ([Emp_No], [Emp_Shift], [Emp_Date])
VALUES
    (500, 'AL', '2015-01-05 00:00:00'),
    (600, 'S', '2015-02-05 00:00:00'),
    (600, 'H', '2015-03-05 00:00:00'),
    (500, 'S', '2015-04-05 00:00:00'),
    (500, 'AL', '2015-05-05 00:00:00'),
    (600, 'AL', '2015-06-05 00:00:00')
;

DECLARE @statement NVARCHAR(max)
,@columns NVARCHAR(max)

SELECT @columns = ISNULL(@columns + ', ', '') + N'[' + tbl.Emp_Shift + ']'
FROM (
   SELECT DISTINCT [Emp_Shift]
   FROM #t
   ) AS tbl

SELECT @statement = ' select Emp_No,[AL] AS [Count Al],[S] As [Count S],[H] AS [Count H] from (
select Emp_No,[Emp_Shift],[Emp_Date] from #t)T
PIVOT(COUNT(Emp_Date) FOR Emp_Shift IN  (' + @columns + ')) as pvt'

EXEC sp_executesql @statement = @statement