2010-08-24 128 views
0

请原谅我,如果这已被回答之前。Sql server 2000数据透视查询

我正在寻找关于如何构建一个数据透视表或交叉表查询的建议。

我有一个表,看起来喜欢这个

Vessel Date Inspector 
A  02/05/10 Morris 
B  05/20/10 Clouseau 
A  07/25/10 Gadget 

我需要的结果是这个样子

Vessel Jan Feb  Mar  April May June July Aug Sept Oct Nov Dec 
    A   Morris        Gadget 
    B         Clouseau 

希望这是有道理的。我希望有人能给我一些建议或帮助让我开始这个。

感谢

+0

如果您在同一个月和同一艘船上有两名检查员,应该会发生什么情况? – Timwi 2010-08-24 04:56:09

+0

我想他们会想要一个逗号分隔的列表。但广管局并不认为会发生。 – gswanson 2010-08-26 00:04:01

回答

2
Select Vessel 
    , Min (Case When Month([Date]) = 1 Then Inspector End) As Jan 
    , Min (Case When Month([Date]) = 2 Then Inspector End) As Feb 
    , Min (Case When Month([Date]) = 3 Then Inspector End) As Mar 
    ... 
    , Min (Case When Month([Date]) = 12 Then Inspector End) As Dec 
From Table 
Group By Vessel 

你有静态声明列。应该指出的是,这只会工作一年。如果您正在寻找的是动态列(月)生成,那么尝试在T-SQL中执行并不是正确的方法,因为只能使用一些非常动态的SQL来完成。相反,您应该使用报告生成器或中间层组件来构建结果集。

0

我不认为你需要为这个枢轴 - 只需创建12子查询,每个月一:

SELECT 
    Vessel, 
    (SELECT TOP 1 Inspector FROM Stuff WHERE Vessel=Tbl.Vessel AND MONTH(Date)=1) as Jan, 
    (SELECT TOP 1 Inspector FROM Stuff WHERE Vessel=Tbl.Vessel AND MONTH(Date)=2) as Feb, 
    (SELECT TOP 1 Inspector FROM Stuff WHERE Vessel=Tbl.Vessel AND MONTH(Date)=3) as Mar, 
    (SELECT TOP 1 Inspector FROM Stuff WHERE Vessel=Tbl.Vessel AND MONTH(Date)=4) as Apr, 
    (SELECT TOP 1 Inspector FROM Stuff WHERE Vessel=Tbl.Vessel AND MONTH(Date)=5) as May, 
    (SELECT TOP 1 Inspector FROM Stuff WHERE Vessel=Tbl.Vessel AND MONTH(Date)=6) as Jun, 
    (SELECT TOP 1 Inspector FROM Stuff WHERE Vessel=Tbl.Vessel AND MONTH(Date)=7) as Jul, 
    (SELECT TOP 1 Inspector FROM Stuff WHERE Vessel=Tbl.Vessel AND MONTH(Date)=8) as Aug, 
    (SELECT TOP 1 Inspector FROM Stuff WHERE Vessel=Tbl.Vessel AND MONTH(Date)=9) as Sep, 
    (SELECT TOP 1 Inspector FROM Stuff WHERE Vessel=Tbl.Vessel AND MONTH(Date)=10) as Oct, 
    (SELECT TOP 1 Inspector FROM Stuff WHERE Vessel=Tbl.Vessel AND MONTH(Date)=11) as Nov, 
    (SELECT TOP 1 Inspector FROM Stuff WHERE Vessel=Tbl.Vessel AND MONTH(Date)=12) as Dec 
FROM (
    SELECT DISTINCT(Vessel) FROM Stuff 
) Tbl 

您可以通过添加使这项工作对于任何特定一年AND YEAR(Date)=2010(例如)到12个子查询中的每一个的结尾。