动态生成SQL Server过程中的列

时间:2015-03-08 23:27:28

标签: sql sql-server stored-procedures

我的存储过程需要帮助。

我有表:ItemsId, ItemName),SuppliersQuotes

Quotes表具有以下结构:Id, ItemId, SupplierId, Quote

1)假设我有N个供应商。如何使用以下列生成表:

ItemName   Supplier1Quote   Supplier2Quote  ...  Supplier-n-Quote

确切地说,假设我有3个供应商和以下Quote表:

Id  ItemId  SupplierId  Quote
------------------------------
1   1       1           4.00
2   1       2           5.00
3   2       3           7.00

我想得到:

ItemName   Supplier1   Supplier2  Supplier3
--------------------------------------------
ItemName1  4.00        5.00
ItemName2                         7.00 

2)如何对动态数量的供应商执行相同的操作,这些供应商将被传递到此程序中?

到现在为止,我传递了一个字符串参数,其中包含由suppliersId划分并包裹的,并以这种方式获取这些ID(感谢gotqn Can not execute SQL Server stored procedure):

DECLARE @SuppliersIdString VARCHAR(1000)
--SET @SuppliersIdString = ',2,'; --

DECLARE @TempXML XML = CONVERT(XML, '<t>' + REPLACE(@SuppliersIdString, ',', '</t><t>') + '</t>');
WITH DataSource ([SuppliersId]) AS
(
    SELECT T.c.value('.', 'VARCHAR(100)')
    FROM @TempXML.nodes('/t') AS T(c)
    WHERE LEN(T.c.value('.', 'VARCHAR(100)')) > 0
)

这样我得SuppliersId但不知道下一步该做什么(见问题1)

1 个答案:

答案 0 :(得分:-1)

使用SQL Server数据透视表。 MSDN Pivot and Unpivot

select * from Supplier s pivot ( sum (Quote) FOR SupplierId   IN ( [1],[2],[3],[4],[5] )) as p