首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态SQL列

动态SQL列
EN

Stack Overflow用户
提问于 2012-01-27 03:49:16
回答 3查看 226关注 0票数 0

我知道这可能是一个简单的问题,我完全想多了,所以这里是这样的:

我有一个包含以下列的LaborTransaction表:(表1)

代码语言:javascript
复制
    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)

代码语言:javascript
复制
Laborcode | Regular | Vacation | Personal | OT
 JSMITH   |  12.0   |   5.0    |   4.0    | 8.0 

基本上,我只需要汇总所有的劳务交易并检查标签。

  • 如果标记(T1)为空,则将小时数(T1)汇总为常规(T2)
  • 如果标记(T1)为“假期”,则小时数(T1)将汇总为个人标记(T1)为“个人”,则小时数(T1)将汇总为个人(T2)- OTHours(T1)将所有条目合计为OT(T2)

在我的第一次尝试中,我自己加入了表,但得到了重复的结果。“常规”、“休假”、“个人”和“加班”多次添加相同的人工事务处理。我正在使用MS SQL创建第二个表。任何和所有的帮助都非常感谢!谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-27 03:55:52

代码语言:javascript
复制
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 
票数 3
EN

Stack Overflow用户

发布于 2012-01-27 03:58:57

您可以使用手动透视使用案例来执行此操作,也可以使用SQL Server 2005及更高版本的透视功能。

如果标记可能会发生变化,您可以使用动态SQL来生成列:

SQL Server 2005 Pivot on Unknown Number of Columns

Pivot Table and Concatenate Columns

PIVOT in sql 2005

票数 1
EN

Stack Overflow用户

发布于 2012-01-27 04:00:22

代码语言:javascript
复制
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

这并不是完全动态的。如果创建不同的标记值,则不会创建新列。您必须为新列创建代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9024291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档