[英]How to show second and third row column values in first row as column values in sql
我有這種情況,我必須在第一行顯示第二行和第三行列值作為結束時的列值。
OrgCode | OrgType
------ | ------
001902001| 5
001902005| 5
001902000| 4
001903000| 4
Id | OrgType | materialId | materialCount
--- | ------ | -----------| -----------
1 | 5 | 793167 | 3
2 | 5 | 793257 | 3
3 | 5 | 794808 | 3
4 | 4 | 793167 | 10
5 | 4 | 793257 | 10
6 | 4 | 794808 | 10
基於這兩個表,我需要最終的輸出,如下所示:
OrgCode | OrgType | Item1 | Count1 | Item2 | Count2 | Item3 | Count3
------ | ------- ----- ------ ------- ------- ------ ------
001902001| 5 | 793167 | 3 | 793257 | 3 | 794808 | 3
001902005| 5 | 793167 | 3 | 793257 | 3 | 794808 | 3
001902000| 4 | 793167 | 10 | 793257 | 10 | 794808 | 10
001903000| 4 | 793167 | 10 | 793257 | 10 | 794808 | 10
任何人請幫助我。 提前致謝
這個問題經常出現在論壇中,這是可以理解的,因為SQL不是為了實現人們發現如此有用的數據透視表/交叉表功能而構建的。 一個好的方法是將數據移動到自然的地方,如電子表格或數據操作語言,如R / python / Julia。 在任何情況下,都可以使用tablefunc
擴展在Postgresql中tablefunc
。 查詢看起來很復雜,但它是有啟發性的,如果你必須留在Postgresql里面(很方便),那么這就是要走的路:
CREATE extension tablefunc ;
-- table are called table1 and table2
SELECT tt.orgcode,
ss.orgtype,
item1,
count1,
item2,
count2,
item3,
count3
FROM
crosstab($$ select
a.orgcode,
'item'||row_number() over (partition by a.orgcode order by b.materialid) as name,
b.materialid
from table1 a,table2 b where a.orgtype=b.orgtype $$) AS
tt(orgcode integer, item1 integer, item2 integer, item3 integer),
crosstab ($$ select
a.orgcode,
'count'||row_number() over (partition by a.orgcode order by b.materialid) as name,
b.materialcount
from table1 a, table2 b where a.orgtype=b.orgtype $$) AS
qq(orgcode integer, count1 integer, count2 integer, count3 integer),
table1 ss
WHERE tt.orgcode=qq.orgcode
AND tt.orgcode=ss.orgcode
ORDER BY orgtype DESC,
tt.orgcode;
crosstab
函數采用具有三列的表,例如A
B
C
並創建一個表,其中第一列A
和B
的值作為更多列,並且C
的值作為記錄的內容。 該查詢為項目代碼和計數調用crosstab
兩次。
輸出很好:
orgcode | orgtype | item1 | count1 | item2 | count2 | item3 | count3
---------+---------+--------+--------+--------+--------+--------+--------
1902001 | 5 | 793167 | 3 | 793257 | 3 | 794808 | 3
1902005 | 5 | 793167 | 3 | 793257 | 3 | 794808 | 3
1902000 | 4 | 793167 | 10 | 793257 | 10 | 794808 | 10
1903000 | 4 | 793167 | 10 | 793257 | 10 | 794808 | 10
(4 rows)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.