【发布时间】:2017-10-24 11:43:43
【问题描述】:
目前有一个脚本可以合并十几个 SELECT 语句,其中两个示例以及结果示例如下所示。
DECLARE @Age TABLE (name VARCHAR(30), total FLOAT, percentage FLOAT)
INSERT INTO @Age
SELECT '0-18', (SELECT COUNT(*) FROM tblPerson p
INNER JOIN tblClient c ON c.intPersonID = p.intPersonID
WHERE ISNULL(dbo.fncReportClient_Age(p.dteBirthdate, GETDATE()), '') >= 0 AND ISNULL(dbo.fncReportClient_Age(p.dteBirthdate, GETDATE()), '') <= 18), ''
UPDATE @Age
SET percentage = ROUND((SELECT total FROM @Age WHERE name = '0-18')/(SELECT SUM(total) FROM @Age) * 100, 2)
FROM @Age
WHERE name = '0-18'
Etc.
SELECT
g.nvhGenderName,
COUNT(*),
ROUND(COUNT(*) * 1.0 / SUM(COUNT(*)) OVER () * 100, 2)
FROM
tblClient c
LEFT JOIN tblPerson p ON p.intPersonID = c.intPersonID
LEFT JOIN tblGender g ON g.intGenderID = p.intGenderID
GROUP BY g.nvhGenderName
UNION ALL
SELECT * FROM @Age
结果示例如下:
Name | Total | % |
---------------------------------
Male | 6514 | 60.32 |
Female | 4285 | 39.68 |
0-18 | 279 | 1.58 |
19-24 | 1748 | 9.93 |
25-34 | 5423 | 30.80 |
35-64 | 9546 | 54.21 |
65+ | 614 | 3.50 |
我想水平显示这些结果,而不是垂直显示,我认为 PIVOT 可以做到这一点,但从未真正使用过它们。我希望如何显示数据的示例如下所示:
Gender | Total | % | Age | Total | % |
-------------------------------------------------------------
Male | 6514 | 60.32 | 0-18 | 279 | 1.58 |
Female | 4285 | 39.68 | 19-24 | 1748 | 9.93 |
| | | 25-34 | 5423 | 30.80 |
| | | 35-64 | 9546 | 54.21 |
| | | 65+ | 614 | 3.50 |
特别是我不确定如何使用数据透视来组合需要它的多个 (12) SELECT 语句。
任何有关如何格式化的帮助将不胜感激。
【问题讨论】:
-
您想要实现的只是两个枢轴结果集,一个超过性别,一个超过年龄,它们只是“粘合”在一起。您确定这是您想要呈现数据的方式吗?如果是这样 - 也许最好将两个查询结果传递给可视化引擎并在那里组合它们?
-
SQL 不是为“演示”而设计的(尤其是“漂亮的演示”) 您将如何将此报告提供给您的用户?在 HTML 中?使用 PHP? (如果是这样,那么为此使用 PHP/HTML)
标签: sql sql-server tsql pivot unpivot