从 SQL Table(par1, par2, value) 创建 Par1 x Par2 UI 表视图

Posted

技术标签:

【中文标题】从 SQL Table(par1, par2, value) 创建 Par1 x Par2 UI 表视图【英文标题】:Create Par1 x Par2 UI table view out of SQL Table(par1, par2, value) 【发布时间】: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”这样的字符串会给出完全不相关的结果...... :-)。如果是我找不到正确的措辞,我很抱歉。

【问题讨论】:

【参考方案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。 感谢您的建议,我找到了一些参考资料,我会看看。

以上是关于从 SQL Table(par1, par2, value) 创建 Par1 x Par2 UI 表视图的主要内容,如果未能解决你的问题,请参考以下文章

Javascript更改数组元素的位置

是否可以测试这个 Kotlin 类?

使用动态数量的参数调用动态函数[重复]

从嵌套 SQL 查询中选择 TOP 或 GROUP BY 排名数据

抽象基类中初始化const成员变量的常用解决方案

创建返回表的函数不起作用语法错误? SQL