简体   繁体   English

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

[英]Access SQL Pivot Query That Includes Blank Fields

I'm trying to write an Access SQL pivot query that displays values in a single row for all codes in a table for a given ID value, even if the fields are blank. 我正在尝试编写一个Access SQL透视查询,该查询在一行中为给定ID值显示表中所有代码的值,即使字段为空。 So far, everything that I've tried has returned either multiple rows or, if the data's on one row, any blank fields get left out. 到目前为止,我尝试过的所有结果都返回了多行,或者,如果数据在一行中,则所有空白字段都被排除在外。

I've tried this as a pivot query, as a self-join, using IIF, as a union query, and anything else I could think of or find online. 我已经尝试过将其作为数据透视查询,使用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;

I've tried adding IFF statements to the SELECT fields, but no dice. 我尝试将IFF语句添加到SELECT字段中,但没有骰子。

I'm hoping someone can suggest the right approach I should be using to end up with the desired results shown above. 我希望有人可以建议我应该使用的正确方法,以最终获得上面所示的预期结果。 Thanks for any help you can give. 谢谢你提供的所有帮助。

You must group by ID and get the columns with conditional MAX: 您必须按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;

Results: 结果:

ID    AT        PL      TJ     NX
329   7465      7998    6232    

If you remove the WHERE part, the result is: 如果删除WHERE部分,则结果为:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM