在SQL Server过程中动态生成列
我需要有关存储过程的帮助 我有表:项目Id、项目名称、供应商、报价 Quotes表具有以下结构:Id、ItemId、SupplierId、Quote 我假设我有N个供应商。如何生成包含以下列的表:在SQL Server过程中动态生成列,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我需要有关存储过程的帮助 我有表:项目Id、项目名称、供应商、报价 Quotes表具有以下结构:Id、ItemId、SupplierId、Quote 我假设我有N个供应商。如何生成包含以下列的表: ItemName Supplier1Quote Supplier2Quote ... Supplier-n-Quote 确切地说,假设我有3家供应商,并有以下报价表: 我想得到: ItemName Supplier1 Supplier2 Supplier3 ----------
ItemName Supplier1Quote Supplier2Quote ... Supplier-n-Quote
确切地说,假设我有3家供应商,并有以下报价表:
我想得到:
ItemName Supplier1 Supplier2 Supplier3
--------------------------------------------
ItemName1 4.00 5.00
ItemName2 7.00
2如何对动态编号的供应商执行相同操作,哪些Id将被传递到此程序中
现在,我传递了一个字符串参数,该参数包含suppliersId除以并包装为,并通过gotqn以这种方式获得这些Id:
这样我得到了SuppliersId,但不知道下一步该做什么请参见问题1使用SQL Server pivot
ItemName Supplier1 Supplier2 Supplier3
--------------------------------------------
ItemName1 4.00 5.00
ItemName2 7.00
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
)
select * from Supplier s pivot ( sum (Quote) FOR SupplierId IN ( [1],[2],[3],[4],[5] )) as p