【发布时间】:2014-06-11 23:26:40
【问题描述】:
目前正在 SQL Server 2008 中构建 SELECT 语句,但希望使此 SELECT 语句动态化,因此可以根据表中的值定义列。我听说过数据透视表和游标,但在我目前的水平上似乎有点难以理解,这里是代码;
DECLARE @date DATE = null
IF @date is null
set @ date = GETDATE() as DATE
SELECT
Name,
value1,
value2,
value3,
value4
FROM ref_Table a
FULL OUTER JOIN (
SELECT
PK_ID ID,
sum(case when FK_ContainerType_ID = 1 then 1 else null) Box,
sum(case when FK_ContainerType_ID = 2 then 1 else null) Pallet,
sum(case when FK_ContainerType_ID = 3 then 1 else null) Bag,
sum(case when FK_ContainerType_ID = 4 then 1 else null) Drum
from
Packages
WHERE
@date between PackageStart AND PackageEnd
group by PK_ID ) b on a.Name = b.ID
where
Group = 0
以下内容对我很有用,但是 PK_Type_ID 和列的名称(PackageNameX,..)是硬编码的,我需要是动态的,它可以根据 Package 表中的当前值或未来值构建自己.
任何关于正确方向的帮助或指导将不胜感激......,
根据要求
ref_Table(PK_ID,名称)
1, John
2, Mary
3, Albert
4, Jane
Packages(PK_ID、FK_ref_Table_ID、FK_ContainerType_ID、PackageStartDate、PackageEndDate)
1 , 1, 4, 1JAN2014, 30JAN2014
2 , 2, 3, 1JAN2014, 30JAN2014
3 , 3, 2, 1JAN2014, 30JAN2014
4 , 4, 1, 1JAN2014, 30JAN2014
ContainerType(PK_ID,类型)
1, Box
2, Pallet
3, Bag
4, Drum
结果应该是这样的;
Name Box Pallet Bag Drum
---------------------------------------
John 1
Mary 1
Albert 1
Jane 1
我说的以下代码效果很好,问题是Container 表会增长,我需要复制相同的报告而不对列进行硬编码。
【问题讨论】:
-
您能否提供一个包含一些示例数据和预期输出示例的架构?
标签: sql sql-server-2008 cursor pivot-table