没有[]的透视查询

时间:2016-09-30 08:00:01

标签: sql sql-server pivot

我使用此透视查询创建了此视图:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE VIEW [dbo].[ws_monatsreport] AS
SELECT * 
FROM
(
    SELECT a.AdressNrADR,k.monat,p.Id_kopf,a.name + ' '+ a.vorname as Name,p.Artikel, p.Tag,CASE WHEN CAST(p.wert  AS VARCHAR(10)) = '' THEN CAST(p.Menge AS VARCHAR(10)) ELSE CAST(p.Wert AS VARCHAR(10)) END AS Menge 
    FROM   ( ( ( ZUS_Monatsreport_Kopf k
        LEFT JOIN  ZUS_Monatsreport_Pos p ON k.Id =  p.Id_Kopf)  
        LEFT JOIN  ADR_Adressen a ON k.Adresse =  a.AdressNrADR)  
        LEFT JOIN  ADR_GruppenLink gl ON a.AdressNrADR =  gl.AdressNrADR)  
        LEFT JOIN  ADR_Gruppen g ON gl.GruppeADR =  g.GruppeADR 
)src
pivot
( max(menge)
for tag IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28],[29],[30],[31],[35])
) piv;

GO

现在我必须从ERP系统中调用此视图。在我们的系统中,我可以编写SQL查询,但问题是[ ]用于调用ERP内部的参数。

所以,如果我写

SELECT [AdressNrADR],[Monat],[Id_kopf,Name,Artikel],[1],[2] and so on 
FROM ws_monatsreport  

我收到错误。

有没有办法在不使用[]的情况下执行此操作?

如果我拿走它们,我就得不到我想要的结果:(

enter image description here

2 个答案:

答案 0 :(得分:1)

明确列出您的列而不是*,并为视图定义中的[1], [2], ...列指定一些其他名称:

CREATE VIEW [dbo].[ws_monatsreport] AS
SELECT
    AdressNrADR
    ,monat
    ,Id_kopf
    ,Name
    ,Artikel
    ,[1] AS Tag1
    ,[2] AS Tag2
    ,[3] AS Tag3
    ...
    ,[35] AS Tag35
FROM
(
    SELECT
        a.AdressNrADR
        ,k.monat
        ,p.Id_kopf
        ,a.name + ' '+ a.vorname as Name
        ,p.Artikel
        ,p.Tag
        ,CASE WHEN CAST(p.wert  AS VARCHAR(10)) = '' 
            THEN CAST(p.Menge AS VARCHAR(10)) 
            ELSE CAST(p.Wert AS VARCHAR(10)) END AS Menge 
    FROM
        ZUS_Monatsreport_Kopf k
        LEFT JOIN ZUS_Monatsreport_Pos p ON k.Id = p.Id_Kopf
        LEFT JOIN ADR_Adressen a ON k.Adresse = a.AdressNrADR
        LEFT JOIN ADR_GruppenLink gl ON a.AdressNrADR = gl.AdressNrADR
        LEFT JOIN ADR_Gruppen g ON gl.GruppeADR = g.GruppeADR 
) src
pivot
( max(menge)
for tag IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28],[29],[30],[31],[35])
) piv;

答案 1 :(得分:0)

数字列名称存在问题。在引用数字列名称时尝试包括表别名:如表1中所示,table.2而不是1,2