回答
您可以使用類似:
select Month, [2017-04], [2017-03], [2017-02], [2017-01]
from your_Table
where Month in ('A', 'B')
union all
select
'C'
T1.[2017-04] - T2.[2017-04],
T1.[2017-03] - T2.[2017-03],
T1.[2017-02] - T2.[2017-02],
T1.[2017-01] - T2.[2017-03]
from your_Table as T1
left outer join your_Table as T2 on T2.Month = 'A'
where T1.Month = 'B'
Andy,如果桌子上有100行,這將不起作用... upvoted,因爲邏輯是正確的。 –
@冰塔當然不會。但OP在評論中提到,期望的結果應該是用兩個指定行B和A減去數據。它看起來很奇怪 - 但這是原始要求:*「即使有100列也要減去B行 - 一行」 * –
是的正確。 [2017-04],[2017-03],[2017-02],[2017-01]這些值是動態的。我想減去B行 - 一行 –
非常奇怪的問題,而是:
SELECT Month
, [2017-04]
, [2017-03]
, [2017-02]
, [2017-01]
FROM (
SELECT Month
, [2017-04]
, [2017-03]
, [2017-02]
, [2017-01]
, 1 as mOrder
FROM table
WHERE Month in ('B','A')
UNION ALL
SELECT 'C'
, sum(case Month = 'A' then [2017-04]*-1 else [2017-04] end)
, sum(case Month = 'A' then [2017-03]*-1 else [2017-04] end)
, sum(case Month = 'A' then [2017-02]*-1 else [2017-04] end)
, sum(case Month = 'A' then [2017-01]*-1 else [2017-04] end)
, 2 as morder
FROM table
WHERE Month in ('B','A')
)
ORDER BY Month, mOrder
如果我理解正確的話,您將需要動態地添加行和檢查應與總是做因此我會使用以下代碼:
insert into dbo.tab1
select 'C' as month
, t.[2017-04] - tprev.[2017-04] as [2017-04]
, t.[2017-03] - tprev.[2017-03] as [2017-03]
, t.[2017-02] - tprev.[2017-02] as [2017-02]
, t.[2017-01] - tprev.[2017-01] as [2017-01]
from (
select ROW_NUMBER() OVER(ORDER BY month) AS Nr
, month
, [2017-04]
, [2017-03]
, [2017-02]
, [2017-01]
from dbo.tab1
) t left join (
select ROW_NUMBER() OVER(ORDER BY month) AS Nr
, month
, [2017-04]
, [2017-03]
, [2017-02]
, [2017-01]
from dbo.tab1
) tprev on t.Nr = (tprev.Nr -1) -- join with prev row to get the difference
您可以將此i在預先生成月份值的循環中,並在此處傳遞它是一個參數。 我生成了行號並加入了它,因爲如果您的行數多於前兩行,則需要添加一列。 你可以檢查這個here的工作版本。
- 1. 使用Django減去網絡服務器
- 2. 獲取動態SQL的結果轉化爲SQL服務器
- 3. SQL服務器動態SQL
- 4. 減去動態列
- 5. 減去兩個結果
- 6. 使用$減輕服務器
- 7. 如何使用節點服務動態圖像服務器
- 8. 映射結果在SQL服務器
- 9. SQL服務器:扁平化PIVOT結果
- 10. 壓扁SQL服務器INNER JOIN結果
- 11. SQL服務器調換查詢結果
- 12. SQL服務器加入結果條件
- 13. 如何「減去」sql表?
- 14. SQL Server - 減去兩個SQL查詢的結果
- 15. 啓動IIS服務器,如果IIS服務器沒有運行
- 16. 如何使用jquery動態減去每個錶行中的列值
- 17. 如何查詢結果與分頁SQL服務器和PHP
- 18. 如何使用Pycharm在SQL服務器中運行SQL?
- 19. 從服務器發送動態錯誤/失敗結果信息
- 20. SQL服務器 - 行分列無結塊
- 21. 鏈接服務器查詢/動態SQL
- 22. T-SQL動態鏈接服務器
- 23. 動態樞軸Sql服務器
- 24. 動態WHERE語句 - SQL服務器2005
- 25. 動態列 - SQL服務器 - 月爲列
- 26. SQL服務器:動態where子句
- 27. 如何在動態SQL中處理從OpenQuery調用鏈接分析服務器的空結果集?
- 28. 如何在SQL Server 2000中執行服務器端分頁結果?
- 29. 減去後有趣的結果
- 30. 從查詢結果中減去1
如果它有更多的行(例如100行)你的邏輯輸出將如何? –
你在哪裏得到行C的值? –
我需要獲得新的行。您可以使用任何文本而不是C。月值爲動態 –