希望翻转在Excel中呈现的查询的轴

时间:2014-10-02 15:12:12

标签: sql excel

我正在创建一个简单的Excel文件,该文件将在表中显示SQL查询的结果。唯一的问题是我希望水平显示列而不是垂直显示I.E。:

Column name | val | val | val |

Column name | val | val | val |

Column name | val | val | val |

我已经研究了选项,我发现最常见的是使用编辑下的Transpose选项,但这不是我的选项,因为数据不会自动重置。我似乎无法在格式配置或创建查询期间找到该选项。我在Micorsoft Query中创建了查询本身,它位于下方(略微修剪以便于阅读):

SELECT SMPL_HDR.SMPL_HDR_KEY, SMPL_HDR.SMPL_DATE, SMPL_HDR.GROWER_NAME, SMPL_HDR.BREEDCROSS,
SMPL_HDR.FLOCK_AGE, SMPL_HDR.HOUSE_NUMBER, SMPL_HDR.TEST_TYPE, SMPL_HDR.LOCATION,
SMPL_HDR.USER_ID, SMPL_HDR.DATE_ENTERED, SMPL_DTL.SMPL_DTL_KEY, SMPL_DTL.PAWS_WGT, 
SMPL_DTL.NECK_SKIN_WGT, SMPL_DTL.NECK_WGT, SMPL_DTL.HEART_WGT, SMPL_DTL.LIVER_WGT, 
SMPL_DTL.PLD_GIZZARD_WGT, SMPL_DTL.FAT_WGT, SMPL_DTL.PRE_CHILL_WGT, SMPL_DTL.PST_CHILL_WGT, 


FROM EYIS.dbo.SMPL_DTL SMPL_DTL, EYIS.dbo.SMPL_HDR SMPL_HDR
WHERE SMPL_DTL.SMPL_HDR_KEY = SMPL_HDR.SMPL_HDR_KEY AND ((SMPL_HDR.DATE_ENTERED=?))

我会帮助您提供任何帮助。感觉就像在我面前有一个配置选项,我没有看到。

1 个答案:

答案 0 :(得分:0)

如果您对VBA宏感到满意,可以创建一个宏来转置结果并在运行查询后调用该宏。 (不确定你要捕获哪个事件。你没有提供很多关于如何填充你的工作表的细节。)我的VBA非常生疏,但我快速刺了它,这里是转置的我的一些测试数据......

Option Explicit

Public Sub TransposeCells()
    Dim iRow As Integer
    Dim iCol As Integer
    Dim iMaxRow As Integer
    Dim iMaxCol As Integer
    Dim Sheet As Excel.Worksheet
    Dim newSheet As Excel.Worksheet
    Dim Rng As Excel.Range
    Dim newRng As Excel.Range

    iRow = 1
    iCol = 1

    Set Sheet = Application.ActiveSheet
    ' Find maximum boundaries
    Set Rng = Sheet.Cells(iRow, iCol)
    While (Rng.Text <> "")
        iRow = iRow + 1
        Set Rng = Sheet.Cells(iRow, iCol)
    Wend
    iMaxRow = iRow - 1
    iRow = 1

    Set Rng = Sheet.Cells(iRow, iCol)
    While (Rng.Text <> "")
        iCol = iCol + 1
        Set Rng = Sheet.Cells(iRow, iCol)
    Wend
    iMaxCol = iCol - 1
    iCol = 1

    ' Add new sheet for the results
    Set newSheet = Worksheets.Add()
    newSheet.Name = "Transposed"

    ' Transpose the results
    For iRow = 1 To iMaxRow
        For iCol = 1 To iMaxCol
            Set Rng = Sheet.Cells(iRow, iCol)
            Set newRng = newSheet.Cells(iCol, iRow)
            newRng.Select
            ActiveCell.Value = Rng.Text
        Next iCol
    Next iRow
End Sub