SQL - 如何在相关的 table 中每行获得 1 个空列?

SQL - How do I get 1 empty column per row in a related table?

我正在尝试编写一个 SQL 查询,根据 Crystal 的相关 table (t1) 中的行数添加一定数量的空列报告。这些列应具有数据集名称的 header。

所以它应该看起来像这样:

然而,每次添加新行时我都需要更改脚本(例如,开一家商店 - 不经常,但确实会发生)。

我考虑过使用 pivot 函数,但我认为必须定义行数 - 另外,不会发生计算/聚合。

有人知道如何解决这个问题吗?

正如 Larnu 已经提到的,动态 SQL 是一种可行的方法。我建议结合使用 XML PATH 和动态 SQL。下面举个例子:

DECLARE @colList VARCHAR(MAX) = (SELECT STUFF((SELECT ',NULL as t1_row' + cast(col1 AS varchar(3))
                                   FROM MyTable
                                   FOR XML PATH('')) ,1,1,'') AS Txt
                                )

DECLARE @stmt VARCHAR(MAX) = 'SELECT Col1, Col2, Col3, ' + @colList + ' FROM MyTable'

EXEC (@stmt)

我能够使用动态 SQL 获得结果。 脚本看起来像这样:

DECLARE @STRSQL NVARCHAR(MAX) = 'WITH a AS (SELECT ';
DECLARE @Kst nvarchar(6);
DECLARE @Markt NVARCHAR(30);
DECLARE @SCHEMA_NAME VARCHAR(50) = 'XTRADE';


DECLARE C1 CURSOR FOR 
    SELECT NUMMER, BEZEICHNUNG 
    from XTRADE.KUNDE 
    where NUMMER > 99 and NUMMER not in (194, 196, 198) 
            and (DATUM_SCHLIESSUNG > GETDATE() or DATUM_SCHLIESSUNG is null)
    order by    BEZEICHNUNG


    OPEN C1

            PRINT @Kst + ' ' + @Markt
            FETCH NEXT
            FROM C1 into @Kst, @Markt       
    
        while @@FETCH_STATUS = 0

        BEGIN
            SET @STRSQL = @STRSQL + 'null as [' + @Markt + '], '
            FETCH NEXT
            FROM C1 into @Kst, @Markt
        END


    CLOSE C1

DEALLOCATE C1;

SET @STRSQL = left(@STRSQL, len(@Strsql) - 1) + ')'

DECLARE @Statement nvarchar(max) = ', b as (select 1 as Col1, 1 as Col2, 5 as Col3 union all select 2,2,12 union all select 3, 3, 42)';
DECLARE @Exec nvarchar(max) = @STRSQL + @Statement + 'select * from b cross join a';

print @Exec;
exec sp_executesql @Exec