![](/img/trans.png)
[英]How to extract values from grouped rows to specific columns in Oracle SQL?
[英]How to make specific columns into rows and change specific values in SQL
我知道標題很模糊,但我不知道如何更好地解釋這個問題,如果您有任何建議,請告訴我。
我有這張桌子:
CRAccountID DBAccountID 值
我想為每個 CRAccountID 和 DBAccountID 設置一行,例如:
CRAccountID DBAccountID Value
100 111 10
我想得到這些記錄:
AccountID Value
100 10
111 -10
如果您還沒有注意到,我還想將 DBAccountID 值設為負值。
我通過選擇它們並進行Union
來嘗試它,但是當表變大時它需要太多時間(表可以包含超過 400 萬條記錄)
這是我的代碼:
select CRAccountID as AccountID, Value from MyTable
UNION
select DBAccountID as AccountID, -Value as Value from MyTable
注意:我的代碼比這要大得多,每個聯合中幾乎有 4 個連接,因此它變得如此緩慢。
我正在使用微軟 SQL。
您想要取消透視數據。 我建議apply
:
select v.account, v.value
from t cross apply
(values (t.CRAccountID, t.value),
(t.DBAccountID, - t.value)
) v(account, value) ;
您可以將您的復合體表示為 CTE 或子查詢。 或者只是在cross apply
之前將其包含在查詢中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.