【问题标题】:Dynamic generating columns in SQL Server procedureSQL Server 过程中的动态生成列
【发布时间】:2015-03-09 13:50:05
【问题描述】:

我的存储过程需要帮助。

我有桌子:Items (Id, 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) 如何处理动态数量的供应商 ID 将传递到此过程?

现在,我传递了一个包含 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)

【问题讨论】:

    标签: sql sql-server stored-procedures


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-16
      • 2023-03-26
      • 1970-01-01
      相关资源
      最近更新 更多