【问题标题】:Create dynamic select get value for column name - in SQL Server为列名创建动态选择获取值 - 在 SQL Server 中
【发布时间】:2017-03-14 09:38:37
【问题描述】:

请帮我创建一个 select SQL 语句,其结果列名从原始表中的列值中获取(表名是Device_Part):

用户可以输入多个DeviceCode,其中有多个动态PartTypeName,PartTypeName值为PartInfo

【问题讨论】:

  • 也许您正在寻找动态 MS SQL 数据透视表:stackoverflow.com/questions/10404348/…
  • 非常感谢,我试了一下,但对我来说可能很难理解,而且当我的价值观是动态的时候,也许它有恒定的价值
  • 如果我为您编写代码,我将按正常的小时费率向您收取费用!但我会免费帮你。试试吧。犯一些错误。在路上学习一些东西。然后带着你尝试过的东西回来,告诉我们它在什么方面不起作用。请记住包含错误消息和示例数据。
  • 感谢您的建议!我会试试的!

标签: sql sql-server sql-server-2008 select dynamic-sql


【解决方案1】:

这可能会有所帮助:

CREATE Table Device (
DeviceCode NVARCHAR(100) NOT NULL,
PartTypeName NVARCHAR(100) NOT NULL,
PartInfo NVARCHAR(100) NOT NULL
)

Insert Into Device
Values('VT.SX-01','CPU','Pentium G6650'),
('VT.SX-01','Motherboard','H81M -  S2PV'),
('VT.SX-01','RAM','DDR# 4GB - bus 1866 - Nano'),
('VT.SX-01','PartType Name 01','PartInfo 01')

--QUERY
DECLARE @DynamicPivotQuery AS NVARCHAR(MAX);
DECLARE @ColumnNamesInPivot AS NVARCHAR(MAX);

--Get distinct values of PIVOT Column 
SELECT   @ColumnNamesInPivot = ISNULL(@ColumnNamesInPivot + ',', '')
        + QUOTENAME([PartTypeName])
FROM    ( SELECT    DISTINCT
                    [PartTypeName]
          FROM      Device
        ) AS P



SELECT  @DynamicPivotQuery = N'Select DeviceCode,'
        + @ColumnNamesInPivot + ' 
            FROM    ( SELECT * 
          FROM      Device
        ) AS SourceTable PIVOT( MAX(PartInfo) FOR [PartTypeName] IN ('
        + @ColumnNamesInPivot + ') ) AS PVTTable'

EXEC sp_executesql @DynamicPivotQuery;

结果将是:

【讨论】:

【解决方案2】:
Try this

;WITH _CTE(_DeviceCode,_PartTypeName,_PartInfo,_Id)
AS
(
 SELECT DeviceCode,PartTypeName,PartInfo ,ROW_NUMBER() OVER (PARTITION BY      PartTypeName ORDER BY Id) FROM Your_tablename
)
SELECT *
FROM
(
SELECT _DeviceCode,_PartTypeName,_PartInfo
FROM _CTE
)C
PIVOT
(
 MAX(_PartInfo) FOR _PartTypeName IN ([CPU],[MotherBoard],[RAM],[PartTypeName])
) AS PivotTable;

【讨论】:

  • 非常感谢您的回答,但是 PartTypeName 是动态的,不仅是 [CPU],[MotherBoard],[RAM] ,我们可以输入更多作为电源,显示器,键盘... ...
猜你喜欢
  • 2020-10-06
  • 2013-07-22
  • 2021-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-14
  • 1970-01-01
相关资源
最近更新 更多