我有第一张表格如下
和第二个表格如下
我试图以这种方式在SSRS上显示如下
基本上使用第一个表来修复行数,并使用第二个表来动态加载列并根据ID相应地拟合数据。
我不知道如何以这种方式构建SQL结果的设计,以便能够以演示的方式显示
网上是否有任何样本可以让我以正确的方式处理此问题?
答案 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 强>