复杂动态列水平?

时间:2017-10-31 07:45:22

标签: sql-server reporting-services ssrs-2008

我有第一张表格如下

enter image description here

和第二个表格如下

enter image description here

我试图以这种方式在SSRS上显示如下

enter image description here

基本上使用第一个表来修复行数,并使用第二个表来动态加载列并根据ID相应地拟合数据。

我不知道如何以这种方式构建SQL结果的设计,以便能够以演示的方式显示

网上是否有任何样本可以让我以正确的方式处理此问题?

1 个答案:

答案 0 :(得分:1)

试试这个:

DECLARE @First TABLE (ID INT, Description NVARCHAR(50), Amount INT);
DECLARE @Second TABLE (ID INT, Description NVARCHAR(50), Amount INT);

INSERT INTO @First VALUES
(1, N'Cash', 50),
(2, N'CC', 20);


INSERT INTO @Second VALUES
(1, N'C1', 10),
(2, N'C2', 20),
(1, N'C3', 40);

SELECT ID, FD AS Description, FA AS Amount, C1, C2, C3
FROM
    (
        SELECT S.ID, S.Description SD, F.Description FD, F.Amount FA, S.Amount SA
        FROM @First F FULL JOIN @Second S ON F.ID = S.ID
    ) P1
    PIVOT
    (
        MAX(SA) FOR SD IN ([C1], [C2], [C3])
    ) P2

结果:

+----+-------------+--------+------+------+------+
| ID | Description | Amount |  C1  |  C2  |  C3  |
+----+-------------+--------+------+------+------+
|  1 | Cash        |     50 | 10   | NULL | 40   |
|  2 | CC          |     20 | NULL | 20   | NULL |
+----+-------------+--------+------+------+------+

<强> Demo

更新:动态支点

CREATE TABLE First (ID INT, Description NVARCHAR(50), Amount INT);
CREATE TABLE Second (ID INT, Description NVARCHAR(50), Amount INT);
DECLARE @Cols NVARCHAR(MAX), @Query NVARCHAR(MAX);

INSERT INTO First VALUES
(1, N'Cash', 50),
(2, N'CC', 20);


INSERT INTO Second VALUES
(1, N'C1', 10),
(2, N'C2', 20),
(1, N'C3', 40);

SET @Cols = STUFF((SELECT distinct ',' + QUOTENAME(S.Description) 
            FROM Second S
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'');
SET @Query = N'SELECT ID, FD AS Description, FA AS Amount, '+ @cols + '
FROM
    (
        SELECT S.ID, S.Description SD, F.Description FD, F.Amount FA, S.Amount SA
        FROM First F FULL JOIN Second S ON F.ID = S.ID
    ) P1
    PIVOT
    (
        MAX(SA) FOR SD IN ('+@Cols+')
    ) P2'
EXECUTE (@Query)

<强> Dynamic