Sql-Server

交叉表樞軸與否?

  • December 2, 2015

我很難解決以下問題。我目前在一個表中有一組數據,如下所示:

在此處輸入圖像描述

如您所見,有一個發票參考編號以及一個日期和兩個值欄位。對於記錄所屬的所需組,每一行都有一個 Y 或 N。

不幸的是,我無法重新格式化數據(來自 ERP 系統),理想情況下,我想將日期、Value1、Value2 欄位轉換為每組的列。目前,我有一個相當冗長的方法,即為 3 個組中的每一個創建 6 個帶有 InvoiceRef 和 Date/Value1/Value2 的小型臨時表變數。

然後我讀取主表,將 InvoiceRef 上的連接(左連接)連接到每個臨時表變數中的每個 InvoiceRef 欄位,以獲得以下輸出:

在此處輸入圖像描述

如您所見,我在列中獲得所需組中每個 InvoiceRef 的 Date/Value1/Value2 欄位。

我的問題是我覺得有更有效的方法來做到這一點?雖然只是試圖解決數據透視表/交叉表證明是一個挑戰 - 我覺得我需要一些指示甚至確認臨時表解決方案在這種情況下通常是一個可接受的解決方案?

提前謝謝了。

PS:作為參考,我使用的是 MS-SQL 2008 R2

這與旋轉無關,您只是想根據組的數量有條件地複制您的三列三次。一系列 CASE 表達式可以完美地完成這項工作:

SELECT
 InvoiceRef,
 Group1Date   = CASE Group1 WHEN 'Y' THEN Date   END,
 Group1Value1 = CASE Group1 WHEN 'Y' THEN Value1 END,
 Group1Value2 = CASE Group1 WHEN 'Y' THEN Value2 END,
 Group2Date   = CASE Group2 WHEN 'Y' THEN Date   END,
 Group2Value1 = CASE Group2 WHEN 'Y' THEN Value1 END,
 Group2Value2 = CASE Group2 WHEN 'Y' THEN Value2 END,
 Group3Date   = CASE Group3 WHEN 'Y' THEN Date   END,
 Group3Value1 = CASE Group3 WHEN 'Y' THEN Value1 END,
 Group3Value2 = CASE Group3 WHEN 'Y' THEN Value2 END
FROM
 dbo.atable
;

引用自:https://dba.stackexchange.com/questions/122691