人员ID 日期 工作时间
1 8/1 8
1 8/2 8
1 8/3 8
1 8/4 8
1 8/5 8
1 8/6 8
1 8/7 8
员工表:
ID 姓名
1 张三
显示成:
人员ID 工作时间1 工作时间2 工作时间3 工作时间4 工作时间5 工作时间6 工作时间7
张三 8 8 8 8 8 8 8
5 个解决方案
#1
select ID,
sum(case 日期 when '8/1' then 工作时间else 0 end) as DAY1,
sum(case 日期 when '8/2' then 工作时间else 0 end) as DAY2 ,
sum(case 日期 when '8/3' then 工作时间else 0 end) as DAY3,
sum(case 日期 when '8/4' then 工作时间else 0 end) as DAY4,
sum(case 日期 when '8/5' then 工作时间else 0 end) as DAY5,
sum(case 日期 when '8/6' then 工作时间else 0 end) as DAY6,
sum(case 日期 when '8/7' then 工作时间 else 0 end) as DAY7
from SC1 group by ID
ID DAY1 DAY2 DAY3 DAY4 DAY5 DAY6 DAY7
----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
1 8 8 8 8 8 8 8
(1 row(s) affected)
2005以后可以用PIVOT
sum(case 日期 when '8/1' then 工作时间else 0 end) as DAY1,
sum(case 日期 when '8/2' then 工作时间else 0 end) as DAY2 ,
sum(case 日期 when '8/3' then 工作时间else 0 end) as DAY3,
sum(case 日期 when '8/4' then 工作时间else 0 end) as DAY4,
sum(case 日期 when '8/5' then 工作时间else 0 end) as DAY5,
sum(case 日期 when '8/6' then 工作时间else 0 end) as DAY6,
sum(case 日期 when '8/7' then 工作时间 else 0 end) as DAY7
from SC1 group by ID
ID DAY1 DAY2 DAY3 DAY4 DAY5 DAY6 DAY7
----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
1 8 8 8 8 8 8 8
(1 row(s) affected)
2005以后可以用PIVOT
#2
--> 测试数据:[ta]
IF OBJECT_ID('[ta]') IS NOT NULL DROP TABLE [ta]
GO
CREATE TABLE [ta]([人员ID] INT,[日期] VARCHAR(3),[工作时间] INT)
INSERT [ta]
SELECT 1,'8/1',8 UNION ALL
SELECT 1,'8/2',8 UNION ALL
SELECT 1,'8/3',8 UNION ALL
SELECT 1,'8/4',8 UNION ALL
SELECT 1,'8/5',8 UNION ALL
SELECT 1,'8/6',8 UNION ALL
SELECT 1,'8/7',8
--------------开始查询--------------------------
--> 测试数据:[tb]
IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]
GO
CREATE TABLE [tb]([ID] INT,[姓名] VARCHAR(4))
INSERT [tb]
SELECT 1,'张三'
--------------开始查询--------------------------
DECLARE @sql VARCHAR(max)
SELECT @sql=ISNULL(@sql+',','')+QUOTENAME([日期]) FROM [ta]
GROUP BY [日期]
EXEC('
SELECT * FROM
(
SELECT [姓名], [工作时间],[日期] FROM [ta] LEFT JOIN [tb] ON ta.[人员ID]=tb.id
) a
PIVOT(MAX([工作时间]) FOR [日期] IN ('+@sql+')) pit')
/*
姓名 8/1 8/2 8/3 8/4 8/5 8/6 8/7
张三 8 8 8 8 8 8 8
*/
#3
检查 @@servername 和 serverproperty( 'servername ') 是否一致
#4
发错地方了 不好意思
#5
如果我现在要查8月一号到8月5号之间的,其他天数的不要该怎么写?
#1
select ID,
sum(case 日期 when '8/1' then 工作时间else 0 end) as DAY1,
sum(case 日期 when '8/2' then 工作时间else 0 end) as DAY2 ,
sum(case 日期 when '8/3' then 工作时间else 0 end) as DAY3,
sum(case 日期 when '8/4' then 工作时间else 0 end) as DAY4,
sum(case 日期 when '8/5' then 工作时间else 0 end) as DAY5,
sum(case 日期 when '8/6' then 工作时间else 0 end) as DAY6,
sum(case 日期 when '8/7' then 工作时间 else 0 end) as DAY7
from SC1 group by ID
ID DAY1 DAY2 DAY3 DAY4 DAY5 DAY6 DAY7
----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
1 8 8 8 8 8 8 8
(1 row(s) affected)
2005以后可以用PIVOT
sum(case 日期 when '8/1' then 工作时间else 0 end) as DAY1,
sum(case 日期 when '8/2' then 工作时间else 0 end) as DAY2 ,
sum(case 日期 when '8/3' then 工作时间else 0 end) as DAY3,
sum(case 日期 when '8/4' then 工作时间else 0 end) as DAY4,
sum(case 日期 when '8/5' then 工作时间else 0 end) as DAY5,
sum(case 日期 when '8/6' then 工作时间else 0 end) as DAY6,
sum(case 日期 when '8/7' then 工作时间 else 0 end) as DAY7
from SC1 group by ID
ID DAY1 DAY2 DAY3 DAY4 DAY5 DAY6 DAY7
----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
1 8 8 8 8 8 8 8
(1 row(s) affected)
2005以后可以用PIVOT
#2
--> 测试数据:[ta]
IF OBJECT_ID('[ta]') IS NOT NULL DROP TABLE [ta]
GO
CREATE TABLE [ta]([人员ID] INT,[日期] VARCHAR(3),[工作时间] INT)
INSERT [ta]
SELECT 1,'8/1',8 UNION ALL
SELECT 1,'8/2',8 UNION ALL
SELECT 1,'8/3',8 UNION ALL
SELECT 1,'8/4',8 UNION ALL
SELECT 1,'8/5',8 UNION ALL
SELECT 1,'8/6',8 UNION ALL
SELECT 1,'8/7',8
--------------开始查询--------------------------
--> 测试数据:[tb]
IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]
GO
CREATE TABLE [tb]([ID] INT,[姓名] VARCHAR(4))
INSERT [tb]
SELECT 1,'张三'
--------------开始查询--------------------------
DECLARE @sql VARCHAR(max)
SELECT @sql=ISNULL(@sql+',','')+QUOTENAME([日期]) FROM [ta]
GROUP BY [日期]
EXEC('
SELECT * FROM
(
SELECT [姓名], [工作时间],[日期] FROM [ta] LEFT JOIN [tb] ON ta.[人员ID]=tb.id
) a
PIVOT(MAX([工作时间]) FOR [日期] IN ('+@sql+')) pit')
/*
姓名 8/1 8/2 8/3 8/4 8/5 8/6 8/7
张三 8 8 8 8 8 8 8
*/
#3
检查 @@servername 和 serverproperty( 'servername ') 是否一致
#4
发错地方了 不好意思
#5
如果我现在要查8月一号到8月5号之间的,其他天数的不要该怎么写?