簡體   English   中英

SQL 將動態行數轉換為具有多列的列

[英]SQL turn a dynamic number of rows into columns with multiple columns

我有一個大表,最多 90 行和 40 列。 為了 SSRS 報告,需要將此數據轉換為一列,以便它可以顯示為單頁報告。 我不會使用所有行,但有 50 行適用於報告數據集。

我環顧四周尋找幾種解決方案,但它們通常取決於 3 列數據集,並且由於我需要旋轉的列數和行數而不起作用。

問題是,這可能嗎? 如果是這樣,最好的方法是什么?

Pivot 可能是一個解決方案,但我想知道是否有更快的方法將所有 2nd、3rd 等行移動到頂行,並在向上移動的行中的 columnName 前面添加標識符?

示例表:

        -------------------------------------------------------------------------------------------------
        |ActID | MList | List | Seg | Amt1  | Amt2 | Amt3 | Amt4 | Date1  | Date2  | Char1  |... Char30 |
        -------------------------------------------------------------------------------------------------
        |ABCD  |    1  |   1  | AA  | 20.00 | 5.00 | 0    | 0    | 1/2/19 | 2/5/19 | Null   |    Text1  |                            
        |ABCD  |    1  |   2  | AB  | 0     | 0    | 0    | 0    | Null   | Null   | Null   |    Null   |      
        |ABCD  |    1  |   3  | AC  | 35.00 | 24.00| 33.00| 0    | Null   | Null   | Text3  |    Text4  |                                 
        |ABCD  |    2  |   1  | AA  | 0     | 0    | 0    | 0    | 5/5/17 | 3/5/12 | Text19 |    Text30 |              
        |ABCD  |    2  |   2  | AB  | 25.00 | 99.00| 18.00| 5.00 | 2/2/14 | 3/3/19 | Null   |    Null   |                                         
        |FGHA  |    1  |   1  | AA  | 0     | 0    | 0    | 0    | Null   | Null   | Text22 |    Null   |                            
        |FGHA  |    1  |   2  | AB  | 0     | 0    | 0    | 0    | 1/1/20 | 1/1/20 | Null   |    Text5  |                            
        -------------------------------------------------------------------------------------------------

我試圖做的是使用前兩列作為標識符,然后通過使用 List+Seg 字段作為有用的標記來合並所有金額/字符/日期字段列。

所以最終結果將是這樣的:

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|ActID | MList | 1AAAmt1 | 1AAAmt2 | 1AAAmt3 | 1AAAmt4 |1AADate1 |1AADate2 | 1AAChar1 |...1AAChar30 | 2ABAmt1 | 2ABAmt2 | 2ABAmt3 | 2ABAmt4 | 2ABDate1 |2ABDate2 | 2ABChar1 |...2ABChar30 | ...etc |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|ABCD  |   1   | 20.00   | 5.00    | 0       | 0       | 1/2/19  | 2/5/19  | Null     |     Text1   | 0       | 0       | 0       | 0       | Null     | Null    | Null     | Null        | ...etc |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

第一次提出問題時,我通常瀏覽但沒有發現可以完全解決我的行/列數及其動態問題的問題。 希望這能很好地說明問題。

這是使用 SQL Server 2012

SSRS 允許您創建行組和列組以在矩陣中動態旋轉數據。 在此示例中,您將在 ActID 上有一個 Row 組,在 List 上有一個 Column 組。 列組將包含大約 37 列,並為數據集中的每個列表編號重復所有這些列。

如果您在行而不是列中查詢Char字段,則可以使用可變數量的Char字段並將其用作報表中的嵌套列組。

一般來說,我發現最好盡可能將數據查詢到行中,並讓報告分組完成繁重的工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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