【问题标题】:How to create a pivot table in Microsoft SQL Server?如何在 Microsoft SQL Server 中创建数据透视表?
【发布时间】:2021-04-24 15:59:07
【问题描述】:

关于堆栈溢出的第一个问题。我在一家医学检测公司工作,他们需要一张表格,显示 2021 年每个州有多少人接受了每种类型的检测。我的 adr.state 表中有所有州,p.name 表中有所有检测类型.

我写了以下查询:

SELECT
    adr.state,
    'TaqPath COVID-19 rRT-PCR Assay',
    'TaqPath COVID-19 rRT-PCR Assay (Saliva Specimen)',
    'TaqPath COVID-19 rRT-PCR Assay (Throat Specimen)',
    'Beckman Access SARS-CoV-2 IgG Test',
    'PSA, Free',
    'Colorectal Cancer Current Risk'
FROM
    (SELECT DISTINCT 
         r.requisitionNumber,
         adr.state,
         p.name
     FROM
         copia.copia.Requisition AS r
     JOIN
         copia.copia.OrderedPanel AS op ON op.requisitionKey = r.requisitionKey
     JOIN
         copia.copia.panel AS p ON p.panelKey = op.panelKey
     JOIN
         copia.copia.Location AS loc ON loc.locationKey = r.orderingLocationKey
     JOIN
         copia.copia.Address AS adr ON adr.addressKey = loc.addressKey
     WHERE
         copia.dbo.FixDate(r.finalDeliveryStamp) BETWEEN '1/1/2021' AND '4/24/2021'
         AND p.name NOT LIKE '%body mass index%'
         AND p.name NOT LIKE '%hold account%') p 
    PIVOT 
        (SUM(adr.state) 
            FOR p.name IN (['TaqPath COVID-19 rRT-PCR Assay'],
                           ['TaqPath COVID-19 rRT-PCR Assay (Saliva Specimen)'],
                           ['TaqPath COVID-19 rRT-PCR Assay (Throat Specimen)'],
                           ['Beckman Access SARS-CoV-2 IgG Test'],
                           ['PSA, Free'],
                           ['Colorectal Cancer Current Risk'])
        ) AS PVT;

我做错了什么?我收到这些错误:

消息 107,第 15 级,状态 1,第 34 行
列前缀“adr”与查询中使用的表名或别名不匹配。

消息 4104,第 16 级,状态 1,第 2 行
无法绑定多部分标识符“adr.state”。

回顾一下,我需要一个矩阵,其中列是测试名称,行是每种状态类型,其中值是与该状态匹配的测试类型的总和。

非常感谢!

【问题讨论】:

  • 你给你的子查询别名 p ,在子查询之外无法识别 adr :所以sum(p.state)
  • 请提供样本数据和期望的结果。
  • 您应该在pivot 和外部select 中删除旋转列名周围的引号,只需使用[] 引用列名

标签: sql sql-server database tsql


【解决方案1】:

在您的外部查询中,adr 将无法识别。而是只使用state

SELECT
     state,
    'TaqPath COVID-19 rRT-PCR Assay',
    'TaqPath COVID-19 rRT-PCR Assay (Saliva Specimen)',
    'TaqPath COVID-19 rRT-PCR Assay (Throat Specimen)',
    'Beckman Access SARS-CoV-2 IgG Test',
    'PSA, Free',
    'Colorectal Cancer Current Risk'
FROM
    (SELECT DISTINCT 
         r.requisitionNumber,
         adr.state,
         p.name
     FROM
         copia.copia.Requisition AS r
     JOIN
         copia.copia.OrderedPanel AS op ON op.requisitionKey = r.requisitionKey
     JOIN
         copia.copia.panel AS p ON p.panelKey = op.panelKey
     JOIN
         copia.copia.Location AS loc ON loc.locationKey = r.orderingLocationKey
     JOIN
         copia.copia.Address AS adr ON adr.addressKey = loc.addressKey
     WHERE
         copia.dbo.FixDate(r.finalDeliveryStamp) BETWEEN '1/1/2021' AND '4/24/2021'
         AND p.name NOT LIKE '%body mass index%'
         AND p.name NOT LIKE '%hold account%') p 
    PIVOT 
        (SUM(adr.state) 
            FOR p.name IN (['TaqPath COVID-19 rRT-PCR Assay'],
                           ['TaqPath COVID-19 rRT-PCR Assay (Saliva Specimen)'],
                           ['TaqPath COVID-19 rRT-PCR Assay (Throat Specimen)'],
                           ['Beckman Access SARS-CoV-2 IgG Test'],
                           ['PSA, Free'],
                           ['Colorectal Cancer Current Risk'])
        ) AS PVT;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    • 2021-12-26
    • 2012-07-21
    • 2020-08-18
    • 2022-01-03
    相关资源
    最近更新 更多