访问包含空白字段的SQL Pivot查询

时间:2019-01-23 18:10:03

标签: sql vba ms-access

我正在尝试编写一个Access SQL透视查询,即使给定字段为空,该查询也会在一行中为表中给定ID值的所有代码显示值。到目前为止,我尝试过的所有结果都返回了多行,或者,如果数据在一行中,则所有空白字段都被排除在外。

我已经尝试将其作为数据透视查询,使用IIF的自联接,作为联合查询以及其他我能想到或在线找到的东西。

Sample Data:
ID    TypeCode  TypeID
248    AT       3013
329    AT       7465
329    PL       7998
329    TJ       6232
477    NX       1403

Desired results on a query of ID 329:
ID      AT      PL      TJ      NX
329     7465    7998    6232    <blank>

What I get: 
ID    AT    PL      TJ
329   7465  7998    6232

or 
ID    AT    PL      TJ
329   7465  
329         7998
329                 6232

Desired results on a query of ID 248:
ID    AT     PL       TJ      NX
248   7465   <blank>  <blank> <blank>

What I get:
ID    AT
248   7465

Sample query:
TRANSFORM Avg(MyTable.[ID]) AS ID
SELECT MyTable.[ID], TypeCode, TypeID
FROM MyTable WHERE MyTable.ID = 329
GROUP BY TypeCode, TypeID
PIVOT MyTable.TypeCode;

我尝试将IFF语句添加到SELECT字段中,但没有骰子。

我希望有人可以建议我应该使用的正确方法,以最终获得上面所示的预期结果。谢谢你提供的所有帮助。

1 个答案:

答案 0 :(得分:1)

您必须按ID分组,并获得带有条件MAX的列:

SELECT ID,
MAX(IIF(TypeCode = 'AT', TypeID, NULL)) AS AT,
MAX(IIF(TypeCode = 'PL', TypeID, NULL)) AS PL,
MAX(IIF(TypeCode = 'TJ', TypeID, NULL)) AS TJ,
MAX(IIF(TypeCode = 'NX', TypeID, NULL)) AS NX
FROM MyTable
WHERE ID = 329
GROUP BY ID;

结果:

ID    AT        PL      TJ     NX
329   7465      7998    6232    

如果删除WHERE部分,结果为:

ID    AT        PL      TJ      NX
248   3013          
329   7465      7998    6232    
477                             1403