SELECT - 查询中的列的值

时间:2012-08-28 17:39:45

标签: sql

这就是我想要做的。 我有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    |

我该怎么办? 谢谢!

4 个答案:

答案 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)。