Sql 选择“按否计数列组”
我需要有关此问题的帮助,如何在3列中返回计数>> 例: 您可以尝试以下方法:-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
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