从 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) 是什么以及有多长。我需要为大约两打表做这件事,输入所有内容并不是很可行。我相信它必须是可以实现的,即使用 CTEWITH
。还是我错过了你的意思?
哦,别忘了,如果将一行添加到表中(真实场景),那么代码(放置在可打印的报告中)将无法提供正确的结果。
@Oak_3260548。 . .然后你需要一个Dynamic SQL
Pivot。
感谢您的建议,我找到了一些参考资料,我会看看。以上是关于从 SQL Table(par1, par2, value) 创建 Par1 x Par2 UI 表视图的主要内容,如果未能解决你的问题,请参考以下文章