【发布时间】:2018-04-25 19:53:32
【问题描述】:
请有人帮助我如何在 SQL SERVER 2008 中获得结果
【问题讨论】:
标签: sql sql-server sql-server-2008 tsql pivot
请有人帮助我如何在 SQL SERVER 2008 中获得结果
【问题讨论】:
标签: sql sql-server sql-server-2008 tsql pivot
您是否正在尝试做这样的事情:
IF OBJECT_ID('tempdb..#TABLE') IS NOT NULL
BEGIN;
DROP TABLE #TABLE;
END;
CREATE TABLE #TABLE
(
[Generic Name] varchar(15),
[Description]varchar(15)
)
INSERT #TABLE
SELECT 'RESISTOR', 'POWER' UNION ALL
SELECT 'RESISTOR', 'Type' UNION ALL
SELECT 'RESISTOR', 'DESIGN' UNION ALL
SELECT 'RESISTOR', 'Material' UNION ALL
SELECT 'OTHER', 'Other' UNION ALL
SELECT 'OTHER', 'Material';
DECLARE @cols NVARCHAR(MAX)
,@query NVARCHAR(MAX);
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(Description)
from #TABLE
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT [Generic Name], ' + @cols + '
FROM
(
SELECT [Generic Name], [Generic Name] AS [BaseName], [Description]
from #TABLE
) DS
pivot
(
COUNT([BaseName])
for [Description] in (' + @cols + ')
) p '
SELECT @query
execute(@query)
这将向您显示每个通用名称的 count(但如果您对每个描述只有一条记录,则它只会是 true/have 或 false/not have)。
【讨论】:
SELECT 4096 列这是 SQL Server 限制 - docs.microsoft.com/en-us/sql/sql-server/… - 这意味着您有超过 4096 个唯一描述。您可以尝试在零件上选择它们 - 首先是 4096,然后是第二个,依此类推,然后在零件上返回它们。
client side应用程序中返回此数据,您可以将其分隔并使用不同的行集部分返回。
在您的查询中尝试以下更改
set @query = 'SELECT ' + @cols + ' from
(
select [Generic Name], Description
from @TABLE
) x
pivot
(
MAX([Generic Name])
for Description in (' + @cols + ')
) p '
由于您正在旋转记录,因此不会有列 [Generic Name] -- 我在表结构中没有看到任何这样的列,所以我假设您需要到列 Base Name--所以,@Cols 参数就足够了
请在此处查看Demo
【讨论】: