如何解决SQL查询将表分组为表表?
我正在将Power BI查询“转换”为SQL查询。关键查询之一执行以下操作:
- 获取下表:
+-----+-----+----------+
| PID | FID | Quantity |
+-----+-----+----------+
| 1 | A | 15 |
+-----+-----+----------+
| 1 | B | 2 |
+-----+-----+----------+
| 2 | B | 3 |
+-----+-----+----------+
| 2 | D | 8 |
+-----+-----+----------+
| 3 | C | 2 |
+-----+-----+----------+
- 按PID分组,保留所有行(每个
Data
是一个表):
+-----+-------+
| PID | Table |
+-----+-------+
| 1 | Data |
+-----+-------+
| 2 | Data |
+-----+-------+
| 3 | Data |
+-----+-------+
- 每
COUNT
运行一些自定义逻辑/操作(其中一些非常复杂,因此不只是MAX
或Data
等),并翻转每个Data
到每行一个新表中:
+-----+-------+-------------+
| PID | Table | Transformed |
+-----+-------+-------------+
| 1 | Data | Data |
+-----+-------+-------------+
| 2 | Data | Data |
+-----+-------+-------------+
| 3 | Data | Data |
+-----+-------+-------------+
- 展开
Transformed
列:
+-----+----------------+----------------+
| PID | ResultColumn-1 | ResultColumn-2 |
+-----+----------------+----------------+
| 1 | SomeResult-1 | SomeResult-1b |
+-----+----------------+----------------+
| 2 | SomeResult-2 | SomeResult-2b |
+-----+----------------+----------------+
| 3 | SomeResult-3 | SomeResult-3b |
+-----+----------------+----------------+
可以在SQL中执行此过程吗?我本以为我们可以将Group By
与某些自定义功能一起使用,但并不完全确定该怎么做-任何指导将不胜感激。
谢谢!
样本输出:
+-----+------------------+----------------+
| PID | ResultColumn-1 | ResultColumn-2 |
+-----+------------------+----------------+
| 1 | There are 2 of B | and 15 of A |
+-----+------------------+----------------+
| 2 | There are 8 of D | and 3 of B |
+-----+------------------+----------------+
| 3 | There are 2 of C | |
+-----+------------------+----------------+
解决方法
您可以使用row_number()
和条件聚合来做到这一点:
select
pid,max(case when rn = 1 then concat('There are ',quantity,' of ',fid) end) res1,max(case when rn = 2 then concat('And ',fid) end) res2
from (
select
t.*,row_number() over(partition by pid order by fid desc) rn
from mytable t
) t
group by pid
请注意,这假设每个pid
最多有2行,如数据所示。否则,您可能需要使用更多条件表达式来扩展select
子句。
是的,可以使用JOIN
在它们之间加入,然后可以将结果分组或对其进行进一步处理。
您的初始查询将类似于:
SELECT
PID,Table,Transformed,ResultColumn-1,ResultColumn-2
FROM
table1 t1
LEFT JOIN table2 t2 ON t2.PID = t1.PID
LEFT JOIN table3 t3 ON t3.PID = t1.PID
LEFT JOIN table4 t4 ON t4.PID = t1.PID
也就是说,PID
是主键,在其他表中用作外键。
如果您提供了预期的结果,那么我们可以为您提供一个产生此结果的初始查询,您可以将其用作启动器!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。