我有一张名为Attendance Master的表格
id ||name ||attn_hours || attn_date
---------------------------------------------
142 || abc || 2.00 || 2013-01-17 00:00:00.000
142 || abc || 3.00 || 2013-01-18 00:00:00.000
143 || pqr || 3.00 || 2013-01-17 00:00:00.000
143 || pqr || 2.00 || 2013-01-18 00:00:00.000
我想在多列中使用不同的名称和出勤时间,列名称为attn_date 以下
id ||name ||2013-01-17||2013-01-18
---------------------------------
142 || abc || 2.00 || 3.00
143 || pqr || 3.00 || 2.00
请帮忙
提前致谢。
答案 0 :(得分:0)
您需要透视数据。在sql server 2008中,您可以按照指南@ http://msdn.microsoft.com/en-us/library/ms177410(v=sql.105).aspx
执行此操作然后你可以理解为什么会这样:http://sqlfiddle.com/#!3/3f8a3/1/0
答案 1 :(得分:0)
试试这个:
SELECT
Id, name, [2013-01-17], [2013-01-18]
FROM Tbl
PIVOT
(
MAX(attn_hours)
FOR attn_date in ([2013-01-17], [2013-01-18])
) A
或者这个:
SELECT
Id,
name,
MAX(CASE WHEN attn_date = '2013-01-17' THEN attn_hours END) [2013-01-17],
MAX(CASE WHEN attn_date = '2013-01-18' THEN attn_hours END) [2013-01-18]
FROM Tbl
GROUP BY Id, Name
<强> SQL FIDDLE DEMO 强>
答案 2 :(得分:0)
试试这个:
DECLARE @Dates VARCHAR(8000)
Declare @Month int=1
SELECT @Dates = COALESCE(@Dates + '], [', '') + cast(attn_date as varchar(20)) FROM
(select distinct attn_date from tbl where month(attn_date)=@Month) as a
Set @Dates='['+@Dates+']'
--SELECT @Dates
Declare @query varchar(max)
Set @query=
'SELECT
Id, name, ' + @Dates + '
FROM Tbl
PIVOT
(
MAX(attn_hours)
FOR attn_date in (' + @Dates + ' )
) A'
print @query
exec(@query)