我知道这可能是一个简单的问题,我完全想多了,所以这里是这样的:
我有一个包含以下列的LaborTransaction表:(表1)
Laborcode | Hours | OTHours | Tag
JSMITH | 2.0 | 0.0 | VACATION
JSMITH | 4.0 | 3.0 | PERSONAL
JSMITH | 3.0 | 0.0 | VACATION
JSMITH | 5.0 | 1.0 |
JSMITH | 7.0 | 4.0 | 我需要生成以下表格:(表2)
Laborcode | Regular | Vacation | Personal | OT
JSMITH | 12.0 | 5.0 | 4.0 | 8.0 基本上,我只需要汇总所有的劳务交易并检查标签。
在我的第一次尝试中,我自己加入了表,但得到了重复的结果。“常规”、“休假”、“个人”和“加班”多次添加相同的人工事务处理。我正在使用MS SQL创建第二个表。任何和所有的帮助都非常感谢!谢谢!
发布于 2012-01-27 03:55:52
select Laborcode,
sum(case when Tag = '' then Hours end) as Regular,
sum(case when Tag = 'VACATION' then Hours end) as Vacation,
sum(case when Tag = 'PERSONAL' then Hours end) as Personal,
sum(OTHours) as Overtime
from LaborTransaction
group by Laborcode 发布于 2012-01-27 03:58:57
您可以使用手动透视使用案例来执行此操作,也可以使用SQL Server 2005及更高版本的透视功能。
如果标记可能会发生变化,您可以使用动态SQL来生成列:
SQL Server 2005 Pivot on Unknown Number of Columns
发布于 2012-01-27 04:00:22
Select
LT.Laborcode
, Sum(case when NullIf(LT.Tag, '') Is Null then Hours end) as Regular
, Sum(case when LT.Tag = 'VACATIION' then Hours else end) as Vacation
, Sum(case when LT.Tag = 'Personal' then Hours else end) as Personal
, Sum(LT.OTHours) as OverTime
from LaborTransaction as LT
Group by LT.Laborcode这并不是完全动态的。如果创建不同的标记值,则不会创建新列。您必须为新列创建代码。
https://stackoverflow.com/questions/9024291
复制相似问题