自定义sql查询结果

时间:2016-07-03 19:01:53

标签: sql sql-server

让我解释一下我的桌子是如何设置的。

我在SQL Server中有一个表:

CREATE TABLE [dbo].[CountyCaseUserData] 
(
    [CCId] [int] IDENTITY(1,1) NOT NULL,

    [CaseTypeId] [int] NULL,
    [UserInput] [varchar](max) NULL,
    [UserMasterId] [numeric](18, 0) NULL,
    [DepartmentId] [int] NULL,
    [DisplayLabel] [varchar](100) NULL,
    [UniqueEntryRowId] [varchar](20) NULL,
    [UniqueEntryId] [varchar](20) NULL,
)

请检查图像中的数据存储方式。

enter image description here

现在我想得到这样的结果:

enter image description here

列标题为DisplayLabel,数据为UserInput。而且我认为不仅仅是为了转置数据,因为标题是重复的。

UniqueEntryRowId对于每个条目组合都是唯一的,当它更改时,预计数据会出现在另一行中。

如有需要,请询问任何细节。谢谢

使用此查询:

DECLARE @DynamicPivotQuery AS NVARCHAR(MAX)
DECLARE @ColumnName AS NVARCHAR(MAX)

--Get distinct values of the PIVOT Column 
SELECT 
    @ColumnName= ISNULL(@ColumnName + ',','') + QUOTENAME(DisplayLabel)
FROM 
    (SELECT DISTINCT DisplayLabel 
     FROM CountyCaseUserData) AS DisplayLabel

--Prepare the PIVOT query using the dynamic 
SET @DynamicPivotQuery = 
  N'SELECT UniqueEntryRowId, ' + @ColumnName + '
    FROM CountyCaseUserData
    PIVOT(max(UserInput) 
          FOR DisplayLabel IN (' + @ColumnName + ')) AS PVTTable'
--Execute the Dynamic Pivot Query
EXEC sp_executesql @DynamicPivotQuery

但它返回:

enter image description here

你能指出我在哪里错了吗?

1 个答案:

答案 0 :(得分:2)

请参阅以下代码:

我通过DisplayLabel添加了row_number()函数和分区来对相同的记录进行分组并提供唯一的行号索引

DECLARE @cols AS NVARCHAR(MAX),
@query  AS NVARCHAR(MAX);

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.DisplayLabel) 
        FROM [dbo].[CountyCaseUserData] c
        FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'')


 set @query = 'SELECT ' + @cols + ' 
 from 
        (
            SELECT UserInput, DisplayLabel,row_number() 
                       over (partition by DisplayLabel order by  CCId) AS No
            from [dbo].[CountyCaseUserData]
       ) x
        pivot 
        (
            max(UserInput)
            for DisplayLabel in (' + @cols + ')
        ) p ';


 execute(@query)

请参阅下面的屏幕截图:

示例数据 enter image description here

示例结果 enter image description here