具有独立 where 子句的多列 - SQL Pivot?

2023-12-02

是否可以采用以下方式构建的表格:

ID    Month     Info1 Info2
1      1          A     B
1      2          C     D
1      3          E     F
2      3          G     H
2      4          I     J

最终形成这样的表格:

ID    JanInfo1 JanInfo2 FebInfo1 FebInfo2 MarInfo1 MarInfo2 AprInfo1 AprInfo2
1        A        B        C        D        E        F        NULL    NULL
2       NULL      NULL    NULL     NULL      G        H         I       J

我研究过使用枢轴但无法让它们工作。

我目前每个月都使用 CROSS APPLY 表值函数。

有一个更好的方法吗?

编辑:添加了现有查询 - 尝试简化显示:

-- Get the unique IDs
DECLARE @PersonIds TABLE
(
    UploadID UNIQUEIDENTIFIER,
    PersonId VARCHAR(200),
    RecordYear INT
)
INSERT INTO @PersonIds
    SELECT DISTINCT UploadID, PersonId, RecordYear
    FROM [VERTICALTABLE] 
    WHERE UploadID = @PTPUploadID
            AND RecordYear = @RecordYear
        GROUP BY  UploadID, PersonId, RecordYear

-- Flatten via functions
INSERT INTO [FLATTABLE](PersonID, JanuaryCoverage, FebruaryCoverage, MarchCoverage, AprilCoverage, MayCoverage, JuneCoverage, 
        JulyCoverage, AugustCoverage, SeptemberCoverage, OctoberCoverage, NovemberCoverage, DecemberCoverage)

    SELECT PID.PersonID, M1.Covered, M2.Covered, M3.Covered, M4.Covered, M5.Covered, M6.Covered,
        M7.Covered, M8.Covered, M9.Covered, M10.Covered, M11.Covered, M12.Covered
    FROM @PersonIds AS PID
    OUTER APPLY GetMonthInfpo(@PTPUploadID, @RecordYear, 1, PID.PersonId) AS M1
    OUTER APPLY GetMonthInfpo(@PTPUploadID, @RecordYear, 2, PID.PersonId) AS M2
    OUTER APPLY GetMonthInfpo(@PTPUploadID, @RecordYear, 3, PID.PersonId) AS M3
    OUTER APPLY GetMonthInfpo(@PTPUploadID, @RecordYear, 4, PID.PersonId) AS M4
    OUTER APPLY GetMonthInfpo(@PTPUploadID, @RecordYear, 5, PID.PersonId) AS M5
    OUTER APPLY GetMonthInfpo(@PTPUploadID, @RecordYear, 6, PID.PersonId) AS M6
    OUTER APPLY GetMonthInfpo(@PTPUploadID, @RecordYear, 7, PID.PersonId) AS M7
    OUTER APPLY GetMonthInfpo(@PTPUploadID, @RecordYear, 8, PID.PersonId) AS M8
    OUTER APPLY GetMonthInfpo(@PTPUploadID, @RecordYear, 9, PID.PersonId) AS M9
    OUTER APPLY GetMonthInfpo(@PTPUploadID, @RecordYear, 10, PID.PersonId) AS M10
    OUTER APPLY GetMonthInfpo(@PTPUploadID, @RecordYear, 11, PID.PersonId) AS M11
    OUTER APPLY GetMonthInfpo(@PTPUploadID, @RecordYear, 12, PID.PersonId) AS M12
    WHERE UploadID = @PTPUploadID 
        AND RecordYear = @RecordYear

函数看起来像

ALTER FUNCTION GetMonthInfpo( 
(   
    @UploadID UNIQUEIDENTIFIER,
    @Year INT,
    @Month INT,
    @PersonID VARCHAR(200)
)
RETURNS TABLE 
AS
RETURN 
(
    SELECT COUNT(*) AS 'Covered'
    FROM [VERTICALTABLE] 
    WHERE UploadID = @UploadID
        AND RecordYear = @Year
        AND RecordMonth = @Month
        AND PersonId = @PersonID
)

您不需要多个子查询。答案很简单——使用集合论。从您的第一个表 ID/Month/Info1/Info2 中执行 ID/Month + (1+2) /Info 的简单联合 - 例如:

select ID, cast(Month as varchar(10)) + cast('_1' as varchar(10)) ComposedMonth, Info1 Info 
from tbl
union all
select ID, cast(Month as varchar(10)) + cast('_2' as varchar(10)), Info2 
from tbl

然后使用该数据集(以视图或临时表的形式呈现)pivot clause.

select * 
from vw_tbl t
pivot (max(Info) for ComposedMonth in ([1_1], [1_2]...)) p
-- or if you will cast month to text
-- pivot (max(Info) for ComposedMonth in ([Jan_1], [Jan_2]...)) p

组合字符串是轻松旋转的关键。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有独立 where 子句的多列 - SQL Pivot? 的相关文章

  • 什么时候应该使用 C++ 而不是 SQL?

    我是一名 C 程序员 偶尔使用 MySQL 来处理数据库 但我的 SQL 知识相当有限 但我肯定愿意改变这一点 目前 我正在尝试仅使用 SQL 查询对数据库中的数据进行分析 但我准备放弃了 转而将数据导入到C 中 用C 代码进行分析 我和同
  • 如何将 数组传递给存储过程

    我有一个清单索赔数据在 C 中 它有三个项目 日期 类型和描述 其中可以有多行 如下所示 索赔数据 Date Type Description 01 02 2012 Medical Its a medical 05 02 2013 Thef
  • 如何搜索例程的内容/(SP-触发函数)

    我需要在数据库内所有例程的例程主体 存储过程 函数 触发器 中搜索文本 我该怎么做 Thanks SELECT OBJECT NAME object id FROM sys sql modules WHERE definition LIKE
  • 实现软删除的最佳方法是什么?

    目前在做一个项目 我们要对大部分用户 用户角色 实现软删除 我们决定添加一个is deleted 0 数据库中每个表的字段并将其设置为 1 如果特定用户角色点击特定记录上的删除按钮 现在为了将来的维护 每个SELECT查询需要确保它们不包含
  • st_intersects 与 st_overlaps

    这两个查询有什么区别 select a gid sum length b the geom from polygons as a roads as b where st intersects a the geom b the geom gr
  • 在 SQL Server 上执行分页的最佳方式是什么?

    我有一个数据库超过200万记录 我需要执行分页以在我的 Web 应用程序上显示 该应用程序每页必须有 10 条记录DataGrid 我已经尝试使用ROW NUMBER 但是这种方式会选择所有 200 万条记录 然后只得到 10 条记录 我也
  • 如何在MYSQL中将整个字符串小写并保持第一个大写[重复]

    这个问题在这里已经有答案了 我的表栏目 我预期的输出会在列中发生变化 Smith Allen Doyle Dennis Baker Waker 这是我尝试过的 但不起作用 UPDATE TABLE employee SET last nam
  • 如何通过 SQL 表关联 SQL 中的实体

    我是数据库设计的初学者 我需要为项目创建数据库 我可以用面向对象的术语解释我想要做什么 值得庆幸的是 数据库专家会很友善地向我解释如何在数据库方面处理这个问题 我想创建一个与位置实体 州 城市 有关系的用户 ID 名称 实体 所以在编程语言
  • 使用子查询 select 创建新表

    我试图从子查询选择创建一个新表 但出现以下错误 附近的语法不正确 SELECT INTO foo FROM SELECT DATEPART MONTH a InvoiceDate as CalMonth DATEPART YEAR a In
  • 如何从 SQL Server 2008 查询结果中删除“NULL”

    我有一个包含 59 列和超过 17K 行的表 很多行都有NULL在某些列中 我想删除NULL以便查询返回空白 而不是NULL 我可以运行一些更新功能来替换所有NULL with 使用 SQL Server 2008R2 Management
  • 如何在 DB2 中创建返回序列值的函数?

    如何在 DB2 中创建一个从序列中获取值并返回该值的函数 应该可以在 select 或 insert 语句中使用该函数 例如 select my func from xxx insert into xxx values my func 基本
  • 解析带下划线的 SQL Server 数字文字

    我想知道它为什么有效以及为什么它不返回错误 SELECT 2015 11 Result 11 2015 第二种情况 SELECT 2 1 a a 2 1 检查元数据 SELECT name system type name FROM sys
  • SQL查询查找表的主键?

    我怎样才能找到哪一列首要的关键使用查询来创建表 这是重复的question https stackoverflow com questions 893874 mysql determine tables primary key dynami
  • mysql自动存储记录创建时间戳

    mysql 有什么方法可以在创建记录时自动将时间戳存储在记录行中 我试图使用时间戳 数据类型 和 current timestamp 作为默认值 但后来意识到每次更新记录时都会更新 我只需要一些可以存储创建时间戳的东西 Thanks Set
  • 如何使用 BigQuery 有效地选择另一个表中匹配子字符串的记录?

    我有一个包含数百万个字符串的表 我想将其与包含大约两万个字符串的表进行匹配 如下所示 standardSQL SELECT record FROM record JOIN fragment ON record name LIKE CONCA
  • Spark SQL 中的 SQL LIKE

    我正在尝试使用 LIKE 条件在 Spark SQL 中实现联接 我正在执行连接的行看起来像这样 称为 修订 Table A 8NXDPVAE Table B 4 8 NXD V 在 SQL Server 上执行联接 A revision
  • 通知设置的数据库设计

    用户可以打开或关闭 他的通知设置 帐户 用于通知 例如 更改帐户资料信息 收到新消息等 通知可以通过电子邮件或手机 推送或短信 发送 用户可以只有 1 封电子邮件和多个手机设备 有什么方法可以改进以下数据库设计或者您会采取不同的方式吗 让我
  • 使用加权行概率从 PostgreSQL 表中选择随机行

    输入示例 SELECT FROM test id percent 1 50 2 35 3 15 3 rows 你会如何编写这样的查询 平均 50 的时间我可以获得 id 1 的行 35 的时间 id 2 的行 15 的时间 id 3 的行
  • 我是否需要在外键上指定 ON DELETE NO ACTION?

    我有以下与 SQL Server 2012 一起使用的 DDL CREATE TABLE Subject SubjectId INT IDENTITY 1 1 NOT NULL Name NVARCHAR 50 Not NULL CONST
  • 是否可以引用同一个表中的不同列?

    如果博客有一个 类别 表 如下所示 CREATE TABLE categories id INTEGER PRIMARY KEY AUTO INCREMENT parent id INTEGER NOT NULL name VARCHAR

随机推荐

  • Beautifulsoup 丢失节点

    我正在使用 Python 和 Beautifulsoup 来解析 HTML 数据并从 RSS 源中获取 p 标签 但是 某些 url 会导致问题 因为解析的 soup object 不包括文档的所有节点 例如我尝试解析http feeds
  • 如何更改实体框架生成日期时间 SQL 精度的方式

    我有一个表使用 id 和 DateTime 列作为 pk 但是当我尝试通过实体框架更新数据时 如下所示 using Entities context new Entities var item from item in context Ba
  • Objective C 类的默认基类

    这个问题的答案可能是显而易见的 但我需要确定 当类定义中没有显式定义基类时 所有目标 c 类是否共享一个公共的默认基类 不 如果您没有在类定义中显式定义超类 那么您将创建一个根类 From 可可核心竞争力 根类不继承自其他类 并定义其下层次
  • 如何修复使用 Graphicsmagick 收集的损坏的 alpha 通道(残留像素)的 .gif?

    我想将带有 Alpha 通道的 avi 转换为 gif 首先 我使用 ffmpeg i source avi vf scale 720 1 flags lanczos fps 10 frames ffout 03d png 将 avi 转换
  • 如何“解码”字体文件的eexec?

    我有一个 pfa 字体文件我想阅读渲染字体的 算法 然而 大部分信息都隐藏在二进制行中 currentfile eexec 743F8413F3636CA85A9FFEFB50B4BB27302A5F6C876586CCC1670A7EF5
  • 如何在 PHP 中请求 facebook 权限?

    如何在 PHP 中请求 facebook 权限 你能给我举个例子吗 thanks 假设你有用户的access token 你可以通过 facebook gt getAccessToken 用户登录后 try permissions face
  • 推送消息不使用分布式证书发送

    我可以使用沙箱使用开发人员 p12 文件发送推送通知 但我在应用程序商店上的应用程序 我使用与 gateway push apple com 消息一起使用的分发证书 f12 文件无法到达设备 在分布式证书上激活推送通知服务 我检查了deve
  • 基于位置追踪的iOS全时后台服务

    我目前正在编写一个应用程序 该应用程序依赖于位置跟踪并将有关位置的数据发送到服务器 然而 问题是它必须 24 7 运行 目前我遇到每 2 3 天发生一次的随机崩溃 为了使应用程序在后台持续运行 我所做的是将 NSTimer 放入 appli
  • 如何从标记存储在变量中的树中选择节点?

    考虑以下 XSLT 脚本
  • Windows 中 Git 克隆权限失败

    当我在 Windows 10 v 1909 上使用 CMD 或带有 ssh agent 的 PowerShell 从 GitHub 克隆时 显示以下内容 email protected Permission denied publickey
  • 如何动态改变网页的标题?

    我有一个网页 它实现了一组选项卡 每个选项卡显示不同的内容 单击选项卡不会刷新页面 而是在客户端隐藏 取消隐藏内容 现在需要根据页面上选择的选项卡更改页面标题 出于 SEO 原因 这可能吗 有人可以建议一个解决方案 通过 javascrip
  • 通过多索引的子集从 pandas 中选择行

    我在 pandas 中有一个多索引数据框 索引中有 4 列 还有一些数据列 示例如下 import pandas as pd import numpy as np cnames K1 K2 K3 K4 D1 D2 rdata pd Data
  • HTML - 阿拉伯语支持

    我有一个网站 我必须在其中添加一些阿拉伯语行 如何做到这一点 在哪里获取阿拉伯文本字符 如何使页面支持阿拉伯语 我必须每页放一行 而且有很多页面 所以不能四处制作图像并放置它们 这是所需的答案 但每个人都只回答了其中的一部分 Step 1
  • MySQL 从一个表中选择不在另一个表中的特定条目

    当尝试从表中选择不在另一个表中的特定条目时 我在 MySQL 中遇到问题 我知道这句话听起来很疯狂 但这是我想做的一个例子 表用户 user id username password plus other columns not impor
  • 覆盖非活动选项卡的 setTimeout 行为

    我目前正在使用 WebRTC 在 JavaScript 中开发一个点对点游戏 它将其中一个对等点 即主机 视为服务器 而任何其他加入的对等点则通过 Node js 代理服务器连接到主机 我目前正在尝试解决以下问题 如果主机切换选项卡以使游戏
  • 从 ASP.NET 背后的代码调用 Javascript 函数

    我试图在单击按钮时从后面的代码调用其自己文件中的 javascript 方法 aspx 文件 protected void Next Click object sender EventArgs e if hidden Value Respo
  • 程序集调用堆栈 - 术语问题

    我对 Assembly 完全陌生 希望确认以下陈述中我有误解并需要纠正的地方 堆栈指针 ESP 指的是栈顶 最低内存地址 基指针 EBP 用于在构建堆栈帧时临时存储各种内存地址 它通常保存当前堆栈帧的最高内存地址 指令指针 EIP 指的是内
  • 如何在xcode中的表视图中显示json数据

    我是 ios 新手 目前正在使用 json 我只是使用要在表格视图中显示的 iTunes 前 10 名专辑我收到了格式化并在表格视图中显示的数据 但我只能显示专辑名称 但我想显示要在其中显示的特定专辑的所有详细信息同一个细胞 这是我的完整代
  • HTML 元素在使用 jquery 时不会淡出

    我有一个小型网络项目 您可以在这里看到 http seegermattijs be pickone 当您插入两个项目时 选择一个按钮应该淡入 不幸的是它不会淡出 我使用以下代码 bigBtn fadeIn slow 一开始我让 bigBtn
  • 具有独立 where 子句的多列 - SQL Pivot?

    是否可以采用以下方式构建的表格 ID Month Info1 Info2 1 1 A B 1 2 C D 1 3 E F 2 3 G H 2 4 I J 最终形成这样的表格 ID JanInfo1 JanInfo2 FebInfo1 Feb