在微信群裡,崔總問了一個問題,是關於用SQL製作交叉表的,問題如下:
=========================================
主要目的是:將CardCode重複的行 的次數 顯示出來
現有一個查詢表結果為:
CardCode Total
A001 100。00
B003 920。00
C002 800。00
A001 830。00
C002 1000。00
A001 500
現在想將結果顯示成這樣的形式:
CardCode Total 1 Total 2 Total 3
A001 100。00 830 500
B003 920。00 0 0
C002 800。00 1000 0
(假如有N個CardCode 或者 一個CardCode 有N個Total,同理可以進行依次迴圈)
想法是透過SQL臨時表來實現:
現在想把這個結果插入一個臨時表 Tmp
如下:
CardCode Total Number
A001 100。00 1
B003 920。00 1
C002 800。00 1
A001 830。00 2
C002 1000。00 2
A001 500 3
然後透過動態SQL語句 以Number 進行 行轉列顯示成所想達到的效果。
都是Tmp 這個臨時該怎麼實現?用IF迴圈?還是遊標?還是想透過迴圈來實現,遊標太複雜了。呵呵
但是語句寫出來的結果,總是達不到所想要的效果。
===============================
粗略來看,要製作所需要的表貌視很簡單,但經過仔細分析,發現要直接透過SQL指令碼製作這個交叉表的確很難。在不改變源表結構的情況下希望直接製作交叉表,對我來說幾呼不可能實現。
如果增加一個欄位於用分離資料,問題就會變得非常簡單。按照這個恩路,在源表中增加一個時間欄位,一個簡單的SQL就可以搞定:
SQL指令碼如下:
_declare @Str nvarchar(MAX)
_select @str = ‘T0。Cardcode’
_select @str = @str+ ‘,sum( Case T0。DocDueDate when ”’ + convert(nvarchar,T0。DocDueDate,111) + ”’ then T0。Doctotal else 0 end ) as ”’ + convert(nvarchar,T0。DocDueDate,111) + ””
from (_select Distinct DocDueDate from ORCT ) T0
_select @str = N’_select ‘+ @str + N’ from ORCT T0 group by T0。CardCode’
_select @str
(備註以後再添請大家關注!)
執行結果如下圖:
SAP相關產品:
SAP GRC許可權合規檢查系統(簡稱AMS-R系統)是SAP ERP應用企業進行許可權合規檢查、違規資料抓取和IT審計的理想工具。
AMS-V SAP License 資產最佳化管理系統產品:是應用於SAP系統許可權風險控制及註冊使用者賬號管理為目標的SAP軟體資產精益化管理方案。
SAP 日誌堡壘機安全管理系統(簡稱AMS-L系統)是一款面向SAP ERP 系統的網路安全管理工具,提供基於SAP系統使用者業務行為的常態化監管,是對SAP現有日誌體系的有效增強管理。
SAP 運維管理平臺系統(簡稱AMS-Ops)旨在確保企業SAP應用系統健康、穩定執行的基礎上,持續性的改進、最佳化,從而滿足其業務發展需要的企業級SAP系統運維管理服務。
AMS SAP 商超訂單統一管理系統以商超平臺訂單集中管理為核心,系統支援多平臺、多店鋪、全渠道系統採購訂單、驗收單、結算單等業務單據的統一管理;商超訂單統一管理系統支援與 SAP ERP 系統的無縫銜接,在SAP ERP系統中自動生成銷售訂單、外向交貨單,核對驗收單、結算單等 SD 模組業務操作,有效的簡化企業商超訂單管理工作流程,保證訂單資料處理的統一、準確、高效,實現跨系統、組織的協同管理,提升企業營銷效率。