【问题标题】:Create Par1 x Par2 UI table view out of SQL Table(par1, par2, value)从 SQL Table(par1, par2, value) 创建 Par1 x Par2 UI 表视图
【发布时间】:2020-01-16 11:12:18
【问题描述】:

如何从 SQL Table(par1, par2, value) 中创建 Par1 x Par2 表输出(以便您可以以人性化和有意义的方式将其呈现给用户)。示例:

我没有太多代码,也没有什么值得展示的,我认为有一个标准的方法可以做到这一点。我开始尝试生成行标题并使用WITH 窗口函数添加UNION,但立即开始挣扎。

测试数据样本:

CREATE TABLE TestTable(
    [Par1] [int] NULL,
    [Par2] [int] NULL,
    [Val] [int] NULL
) ON [PRIMARY]
GO

INSERT INTO TestTable (Par1, Par2, Val)
VALUES
    (1, 20  , 104),
    (1, 40  , 105),
    (1, 60  , 110),
    (1, 80  , 115),
    (1, 100 , 148),
    (1, 120 , 150),
    (2, 20  , 162),
    (2, 40  , 163),
    (2, 60  , 174),
    (2, 80  , 188),
    (2, 100 , 192),
    (2, 120 , 196),
    (3, 20  , 200),
    (3, 40  , 217),
    (3, 60  , 231),
    (3, 80  , 255),
    (3, 100 , 279),
    (3, 120 , 283),
    (4, 20  , 284),
    (4, 40  , 284),
    (4, 60  , 286),
    (4, 80  , 288),
    (4, 100 , 297),
    (4, 120 , 300),
    (5, 20  , 303),
    (5, 40  , 305),
    (5, 60  , 307),
    (5, 80  , 325),
    (5, 100 , 337),
    (5, 120 , 349)

旁注:我确信之前必须回答这个问题,但是我无法通过谷歌搜索任何相关答案。搜索像“CREATE TABLE VIEW”这样的字符串会给出完全不相关的结果...... :-)。如果是我找不到正确的措辞,我很抱歉。

【问题讨论】:

    标签: sql sql-server pivot


    【解决方案1】:

    你想要条件聚合:

    SELECT Par1, 
           SUM(CASE WHEN Par2 = 20 THEN Val ELSE 0 END) AS 20_Val,
           . . .
           SUM(CASE WHEN Par2 = 120 THEN Val ELSE 0 END) AS 120_Val
    FROM TestTable tt
    GROUP BY Par1;
    

    【讨论】:

    • 但这是硬编码的。实际上,您不知道表格中的参数 (A x B) 是什么以及有多长。我需要为大约两打表做这件事,输入所有内容并不是很可行。我相信它必须是可以实现的,即使用 CTE WITH。还是我错过了你的意思?
    • 哦,别忘了,如果将一行添加到表中(真实场景),那么代码(放置在可打印的报告中)将无法提供正确的结果。
    • @Oak_3260548。 . .然后你需要一个Dynamic SQL Pivot。
    • 感谢您的建议,我找到了一些参考资料,我会看看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多