问题描述
我正在尝试执行“分组到列”的查询。我找到的相关答案使用的格式如下(https://stackoverflow.com/a/666442):
SELECT
OrganizationName,OrganizationID,SUM(CASE WHEN ReceivableStatus = '30-60 days' THEN InvoiceFee ELSE 0 END) AS [30 - 60 Days],SUM(CASE WHEN ReceivableStatus = '60-90 days' THEN InvoiceFee ELSE 0 END) AS [60 - 90 Days],SUM(CASE WHEN ReceivableStatus = '90-120 days' THEN InvoiceFee ELSE 0 END) AS [90 - 120 Days]
FROM
v_InvoicesFreelanceOutstanding
GROUP BY OrganizationID
因此,您可以将数据分组为3列,并使用case从每一个中有选择地进行选择。但是,如果您有100个案例(在不同的情况下)怎么办?当然,解决方案不只是将SUM(CASE...
行复制和粘贴100次,并为每列设置不同的条件?有没有办法钩上类似generate_series
之类的内容以编程方式生成列?
一个更清晰的例子:
说我有此数据:
+---------+-------------+---------------------+
| User ID | Account Age | Active After X Days |
+---------+-------------+---------------------+
| A | 2 | 0 |
| A | 2 | 1 |
| A | 2 | 2 |
| B | 2 | 0 |
| B | 2 | 1 |
| C | 3 | 0 |
| C | 3 | 1 |
| C | 3 | 2 |
+---------+-------------+---------------------+
其中每一行代表1位用户,该用户的帐户已达到“帐户年龄”天(在查询时),已在X天后采取了某些措施。每个用户在其帐户有效期内每天可以出现一次。
+---------------------+-----------+------------+------------+
| Active After X Days | 1 Day Old | 2 Days Old | 3 Days Old |
+---------------------+-----------+------------+------------+
| 0 | 0 | 2 | 1 |
| 1 | 0 | 2 | 1 |
| 2 | 0 | 1 | 1 |
| 3 | 0 | 0 | 0 |
| 4 | 0 | 0 | 0 |
| 5 | 0 | 0 | 0 |
+---------------------+-----------+------------+------------+
,但不必手动列出1天,2天,3天的时间或X天后的活动时间,而是可以在查询中指定我要在0-5天后进行活动的帐户以及1-3天的活动时间。在这种情况下,翻转轴也可以。
换句话说,有效地使它更像传统的非sql 2d表,可以用两个轴这样绘制它:
+---------------------+-----------+------------+------------+
| | 1 Day Old | 2 Days Old | 3 Days Old |
+---------------------+-----------+------------+------------+
| Active After X Days | |
+---------------------+-----------+------------+------------+
| 0 | 0 | 2 | 1 |
| 1 | 0 | 2 | 1 |
| 2 | 0 | 1 | 1 |
| 3 | 0 | 0 | 0 |
| 4 | 0 | 0 | 0 |
| 5 | 0 | 0 | 0 |
+---------------------+-----------+------------+------------+
我只是想以这种方式直观地查看数据,但是我不确定是否有可能。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)