这就是我想要做的。 我有3个表:工作场所,详细信息和停机时间。 到目前为止,我从Workplace表中选择工作区的编号(我从详细信息表中添加它的名称),发出通知的日期,班次以及停机时间表的停机时间总和 现在......在停机时间表中有一列有停机时间代码。每个通知都有一个代码和分钟数。我想要做的......也有代码那么多的列...这是我的查询现在显示的内容:
|Workplace|Date |Shift|Downtime|
|1345 |2012-08-28 |1 |100 |
|1346 |2012-08-28 |1 |130 |
|1347 |2012-08-28 |1 |40 |
我在停机时间表中有停机时间代码及其报告的分钟数...我希望它类似于:
|Workplace|Date |Shift|Code 1|Code 3|Code 4|Code 6|
|1345 |2012-08-28 |1 |100 |30 |10 | 5 |
|1346 |2012-08-28 |1 |130 |30 |10 | 5 |
|1347 |2012-08-28 |1 |40 |30 |10 | 5 |
我该怎么办? 谢谢!
答案 0 :(得分:2)
那么 - 您想要将停机时间分解为用于它的代码吗? 您应该能够使用案例陈述来执行此操作:
SELECT Workplace,Date,Shift,SUM(CASE WHEN Code = Code1 then Downtime ELSE 0)as Code1,SUM(CASE WHEN Code = Code2 then Downtime ELSE 0)as Code2等
答案 1 :(得分:1)
我的快速回答是你可以使用游标和动态查询。
光标示例: http://www.mssqltips.com/sqlservertip/1599/sql-server-cursor-example/
动态查询示例: http://www.techrepublic.com/blog/datacenter/generate-dynamic-sql-statements-in-sql-server/306
祝你好运。答案 2 :(得分:1)
从你的回复中确定我会建议你拥有大部分代码,所以最终大致会这样:
select
tablea.workplace,
tablea.date,
tablea.shift,
sum(downtimemins),
tableb.code1,
tableb.code3,
tableb.code4,
tableb.code6
from tablea
left join downtime on
tablea.workplace=tableb.workplace and
tablea.date=tableb.date and
tablea.shift=tableb.shift
group by tablea.workplace, tablea.date, tablea.shift
答案 3 :(得分:0)
您需要的基本上是SQL 2005标准中引入的PIVOT子句。 AFAIK Microsoft SQL Server和Oracle支持PIVOT子句。有postgresql的第三方解决方案,但我对其他RDBMS没有任何线索。
因此,根据您使用的数据库:您不能或您可以(使用PIVOT)。