一个SQL查询统计问题,急求答案!
表1[Sale]
字段1:ID (唯一序号)
字段2:ProdID (产品ID)
字段3:SpecId (规格ID)
字段4:Scalar (数量)
字段5:TDate (日期yyyy-mm-dd格式)
数据:
ID ProdId SpecId Scalar TDate
1 1 1 12 2008-1-2
2 1 2 31 2008-1-5
3 1 3 42 2008-1-10
4 2 1 76 2008-1-12
5 2 2 34 2008-1-14
6 2 3 56 2008-1-16
7 3 1 32 2008-1-18
8 3 2 78 2008-1-22
9 3 3 12 2008-1-28
10 1 1 54 2008-2-2
11 1 2 34 2008-2-4
12 1 3 0 2008-2-7
13 2 1 4 2008-2-9
14 2 2 8 2008-2-12
15 2 3 15 2008-2-15
16 3 1 18 2008-2-18
19 3 2 22 2008-2-22
20 3 3 31 2008-2-24
... ...
表2[Product]
字段1:ID(唯一序号)
字段2:ProdName(产品名称)
数据:
ID ProdName
1 产品A
2 产品B
3 产品C
表3[Specif]
字段1:ID(唯一序号)
字段2:SpecName(规格名称)
数据:
ID SpecName
1 规格a
2 规格b
3 规格c
能对应不同产品的不同规格统计出每个月份的数字出来,做出来的表应该反映为:
产品名 规格 年份 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
-----------------------------------------------------------------------------------------------------
产品A 规格a 2008 20 59 70 120 163 189 200 233 258 300 310 350
产品A 规格b 2008 18 34 67 114 159 234 267 282 329 368 420 456
产品A 规格c ... ...
产品B 规格a ... ...
产品B 规格b ... ...
产品B 规格c ... ...
产品C 规格a ... ...
产品C 规格b ... ...
产品C 规格c ... ...
-----------------------------------------------------------------------------------------------------
各产品不同规格的数字均为当月份多个记录的合计数,其中部分当月记录为Null,此时应该显示为0。
请哪位高手给予指教,谢谢
我自己用交叉表查询的语句是:
select
Product as 产品,
Specif as 规格,
year(TDate) as 年份,
sum(case month(TDate) when 1 then Scalar end) as [1月],
sum(case month(TDate) when 2 then Scalar end) as [2月],
sum(case month(TDate) when 3 then Scalar end) as [3月],
sum(case month(TDate) when 4 then Scalar end) as [4月],
... ...
... ...
FROM dbo.Sale INNER JOIN
dbo.Product ON dbo.Sale.ProdId = dbo.Product.id INNER JOIN
dbo.Specif ON dbo.Sale.SpecId = dbo.Specif.id
GROUP BY dbo.Sale.id, dbo.Product.Product, dbo.Specif.Specif, dbo.Sale.Scalar,
dbo.Sale.TDate
结果是这样的:
产品 规格 年份 1月 2月 3月 4月 ... ...
------------------------------------------------------- ... ...
产品A 规格A 2008 12 NULL NULL NULL ... ...
产品A 规格B 2008 31 NULL NULL NULL
产品A 规格C 2008 42 NULL NULL NULL
产品B 规格A 2008 76 NULL NULL NULL
产品B 规格B 2008 34 NULL NULL NULL
产品B 规格C 2008 56 NULL NULL NULL
产品C 规格A 2008 32 NULL NULL NULL
产品C 规格B 2008 78 NULL NULL NULL
产品C 规格C 2008 12 NULL NULL NULL
产品A 规格A 2008 NULL 54 NULL NULL
产品A 规格B 2008 NULL 34 NULL NULL
产品A 规格C 2008 NULL 0 NULL NULL
产品B 规格A 2008 NULL 4 NULL NULL
产品B 规格B 2008 NULL 8 NULL NULL
产品B 规格C 2008 NULL 15 NULL NULL
产品C 规格A 2008 NULL 18 NULL NULL
产品C 规格B 2008 NULL 22 NULL NULL
产品C 规格C 2008 NULL 31 NULL NULL
产品A 规格A 2008 NULL NULL 13 NULL
产品A 规格B 2008 NULL NULL 23 NULL
产品A 规格C 2008 NULL NULL 34 NULL
产品B 规格A 2008 NULL NULL 45 NULL
产品B 规格B 2008 NULL NULL 21 NULL
产品B 规格C 2008 NULL NULL 22 NULL
产品C 规格A 2008 NULL NULL 56 NULL
产品C 规格B 2008 NULL NULL 34 NULL
产品C 规格C 2008 NULL NULL 89 NULL
产品A 规格A 2008 NULL NULL NULL 54
产品A 规格B 2008 NULL NULL NULL 33
产品A 规格C 2008 NULL NULL NULL 91
产品B 规格A 2008 NULL NULL NULL 81
产品B 规格B 2008 NULL NULL NULL 66
产品B 规格C 2008 NULL NULL NULL 43
产品C 规格A 2008 NULL NULL NULL 72
产品C 规格B 2008 NULL NULL NULL 85
产品C 规格C 2008 NULL NULL NULL 66
... ...
... ...
--------------------------------------------------------------- ... ...
全年12个月的记录本来用9行就可以显示了,可现在要用几十行来显示,为什么产品A和规格a的记录在不同的月份不会显示在同一行呢?
问题出在哪里,请指教!谢谢
附:数据表建立代码
CREATE TABLE [Product] (
[id] [int] NOT NULL ,
[Product] [varchar] (30) COLLATE Chinese_PRC_CI_AS NOT NULL ,
CONSTRAINT [PK_Product] PRIMARY KEY CLUSTERED
(
[id]
) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [Sale] (
[id] [int] NOT NULL ,
[ProdId] [int] NOT NULL ,
[SpecId] [int] NOT NULL ,
[Scalar] [numeric](18, 0) NOT NULL ,
[TDate] [smalldatetime] NOT NULL ,
CONSTRAINT [PK_Sale] PRIMARY KEY CLUSTERED
(
[id]
) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [Specif] (
[id] [int] NOT NULL ,
[Specif] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
CONSTRAINT [PK_Specif] PRIMARY KEY CLUSTERED
(
[id]
) ON [PRIMARY]
) ON [PRIMARY]
GO