簡體   English   中英

如何將特定列變為行並更改 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM