需要将具有相同ID的多行数据转换为1行多列数据

2023-12-14

我回顾了已经解决的问题的版本,但是我发现的一些好的技巧(例如,在(分区...)上使用rank())似乎不适用于我所在的Sybase版本。

我希望运行一个程序来提取按如下方式组织的数据:

电子邮件 |偏爱
电子邮件1 |偏好XYZ
电子邮件1 |偏好ABC

并将其呈现在如下表中:

电子邮件 |偏好1 |偏好2
电子邮件1 |偏好XYZ |偏好ABC

本质上,我有同一个人的多个记录(最好通过电子邮件记录作为唯一标识符来识别),并且我想捕获给定用户的这些多个偏好并为每个用户(每封电子邮件)创建 1 个单独的记录。


如果您只有两个偏好,那么您可以使用min() and max():

select email, min(preference) as preference1,
       (case when min(preference) <> max(preference) then max(preference) end) as preference2
from t
group by email;

EDIT:

如果最多有七个值,则使用row_number():

select email,
       max(case when seqnum = 1 then preference end) as preference1,
       max(case when seqnum = 2 then preference end) as preference2,
       max(case when seqnum = 3 then preference end) as preference3,
       max(case when seqnum = 4 then preference end) as preference4,
       max(case when seqnum = 5 then preference end) as preference5,
       max(case when seqnum = 6 then preference end) as preference6,
       max(case when seqnum = 7 then preference end) as preference7
from (select t.*, row_number() over (partition by email order by preference) as seqnum
      from t
     ) t
group by email;

EDIT II:

实际上,您可以使用相关子查询来做到这一点,而不是row_number():

select email,
       max(case when seqnum = 1 then preference end) as preference1,
       max(case when seqnum = 2 then preference end) as preference2,
       max(case when seqnum = 3 then preference end) as preference3,
       max(case when seqnum = 4 then preference end) as preference4,
       max(case when seqnum = 5 then preference end) as preference5,
       max(case when seqnum = 6 then preference end) as preference6,
       max(case when seqnum = 7 then preference end) as preference7
from (select t.*,
             (select count(*)
              from t t2
              where t2.email = t.email and
                    t2.preference <= t.preference
             ) as seqnum
      from t
     ) t
group by email;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

需要将具有相同ID的多行数据转换为1行多列数据 的相关文章

  • 动态/条件 SQL 连接?

    我在 MSSQL 表 TableB 中有数据 其中 dbo tableB myColumn 在特定日期后更改格式 我正在做一个简单的连接到该表 Select dbo tableB theColumnINeed from dbo tableA
  • 导致聚集索引扫描的日期参数

    我有以下查询 DECLARE StartDate DATE 2017 09 22 DECLARE EndDate DATE 2017 09 23 SELECT a col1 a col2 b col1 b col2 b col3 a col
  • 当列的数据类型为 int 时,如何用字符串替换 null

    我有一个包含 3 列的表和如下示例数据 所有列都是数据类型int 我有这个查询 select foodid dayid from Schedule 我要更换dayid用字符串 ifdayid null 为此我尝试了这个查询 select f
  • 如何重命名 SQL Server 中名称中带有方括号的内容?

    我的一张桌子上有一列 周围有方括号 Book Category 我想重命名为Book Category 我尝试了以下查询 sp rename BookPublisher Book Category Book Category COLUMN
  • MS Access:在列中搜索星号/星号

    我正在寻找一种方法来搜索包含字符串数据类型的列 问题是星号或星号是保留符号 以下查询无法正常工作 select from users where instr pattern 如何编写 Access 查询来搜索列中的星号 您可以使用方括号在
  • 如何查询多对多表(一个表的值成为列标题)

    给定此表结构 我想展平多对多关系 并将一个表的名称字段中的值设置为列标题 并将同一表中的数量设置为列值 目前可行的想法是将值放入字典 哈希表 中并用代码表示这些数据 但我想知道是否有 SQL 方法可以做到这一点 我还使用 Linq to S
  • 如果不存在则插入数据(来自 2 个表),否则更新

    再会 我有3张桌子 tbl仓库产品 ProductID ProductName ProductCode Quantity tbl分公司产品 ProductID ProductCode ProductCode Quantity Locatio
  • SSIS使用列位置而不是名称导入Excel文档

    我想知道是否可以通过按位置引用列来使用 SSIS 导入 Excel 文档 例如 导入列 A D M AA 等 我问这个问题是因为我需要从第三方加载多个 Excel 文档 每个文档在相应的列中包含相同的数据类型 但每个文档的列名称不同 Tha
  • 增量SQL查询

    我的应用程序有一组固定的 SQL 查询 这些查询以轮询模式运行 每 10 秒一次 由于数据库的大小 gt 100 GB 和设计 超级规范化 我遇到了性能问题 每当数据库上发生更改查询结果的 CRUD 事件时 是否可以对给定查询进行增量更改
  • JOOQ 查询 JOIN ON WITH 子句

    如何编写 JOOQ 查询来连接 with 子句中的字段 例如 我尝试过 create with a as select val 1 as x val a as y select from tableByName a join ANOTHER
  • 如何使用 RODBC 将数据帧保存到数据库生成的主键表

    我想使用 R 脚本将数据框输入到数据库中的现有表中 并且希望数据库中的表具有顺序主键 我的问题是 RODBC 似乎不允许主键约束 这是创建我想要的表的 SQL CREATE TABLE dbo results ID INT IDENTITY
  • 如何在jOOQ中使用别名

    有人可以指导我如何在 jOOQ 中使用别名吗 我尝试查看 jOOQ 文档 但不清楚 如果可能 请提供示例 Both org jooq Table http www jooq org javadoc latest org jooq Table
  • 如何将特定行保留为查询(T-SQL)的第一个结果?

    我正在编写一个 SQL 查询来获取 Report Builder 3 0 中报表的参数列表 我需要在结果中添加一个带有值 All 的额外行 如下所示 SELECT All UNION SELECT DISTINCT Manager FROM
  • MySQL - 替换列中的字符

    作为一个自学成才的新手 我给自己制造了一个大问题 在将数据插入数据库之前 我将字符串中的撇号 转换为双引号 而不是 MySQL 实际需要的反斜杠和撇号 在我的表增长到超过 200 000 行之前 我认为最好立即纠正此问题 所以我做了一些研究
  • PDO::PARAM_FLOAT 不存在,为什么?

    我想知道为什么 PDO PARAM FLOAT 不存在以及什么可以替代它 没有 可能是由于隐含的舍入问题 只需使用PDO PARAM STR并使用将浮点数转换为字符串strval float or string float
  • ORDER BY id 或 date_created 显示最新结果?

    我有一个表 实际上有几个 我想首先从中获取最新条目的结果 这是我的ORDER BY条款选项 date created INT 从不改变值 id 当然是INT AUTO INCRMENT 两列应同等地代表记录插入的顺序 我自然会使用date
  • 子查询与连接

    我重构了从另一家公司继承的应用程序的一个缓慢部分 以使用内部联接而不是子查询 例如 WHERE id IN SELECT id FROM 重构后的查询运行速度提高了约 100 倍 50 秒到 0 3 我预计会有改进 但谁能解释为什么它如此剧
  • MySQL:查询中周数的周日期范围

    我有一个看起来像这样的数据库表 id clock info 1 1262556754 some info 2 1262556230 some other info 3 1262556988 and another 4 1262555678
  • 优化mysql中日期类型字段的查询

    我目前准备了以下查询 select sum amount as total from incomes where YEAR date 2019 and MONTH date 07 and incomes deleted at is null
  • 如何使组合键唯一?

    I am making a database of students in one school Here is what I have so far 如果您不喜欢阅读 请跳至 简而言之 部分 问题是我对这个设计并不满意 我想要的组合gra

随机推荐

  • 单例模式 - 默认属性

    我一直在研究设置类中使用的单例模式 以下是我的项目 AccessTest 的 Settings Designer cs 的相关代码 internal sealed partial class Settings global System C
  • 如何检查 IOException 是否为 Not-Enough-Disk-Space-Exception 类型?

    我怎样才能检查是否IOException是 磁盘空间不足 异常类型吗 目前 我检查该消息是否与 磁盘空间不足 之类的内容匹配 但我知道如果操作系统语言不是英语 这将不起作用 您需要检查HResult并测试ERROR DISK FULL 0x
  • 无需轮询即可订阅 MySQL 数据库中的更改

    我有一个由不同应用程序更新的 MySQL 数据库 我想从我的 Node js 服务器订阅该数据库的更改 是否可以监视数据库的任何更新 而无需长时间轮询所有行 列以了解其值的任何更改 我见过的一种可能的解决方案是使用 Redis 订阅数据库以
  • 如何安装边缘导轨?

    如何安装最新的 未发布的 Rails 版本 即边缘导轨 已遵循一些建议 但似乎仍然有版本 2 3 5 你所要做的就是跑rake rails freeze edge在你的项目中 如果您还没有开始项目 另一个选择是 mkdir p foo ve
  • 如何在数据框的每一行上执行函数,并仅将输出的一个元素作为新列插入到该行中

    对两个值进行精确二项式测试很容易 但如果想对一大堆成功次数和试验次数进行测试会发生什么 我创建了一个包含测试敏感性 研究中潜在参与者数量的数据框 然后对于每一行 我计算了成功的可能性 这是代码 sens lt seq from 1 to 5
  • Git - 从 SHA1 查找文件名

    我将一个文件添加到索引中 git add somefile txt 然后我通过以下方式获取了该文件的 SHA1 git hash object somefile txt 我现在有一个 SHA1 我想使用 SHA1 检索索引中对象的文件名 g
  • 当程序状态不断变化时,不可变对象的用处

    我知道不可变对象始终具有相同的状态 即它们实际创建时的状态 它们的不变量是由构造函数建立的 并且由于它们的状态在构造后不会改变 因此这些不变量总是保持良好状态 这就是为什么它们可以安全地在多线程环境中发布 这一切都很好 但是由于我们生活在一
  • 从 .NET 程序与 ffmpeg 交互 - 写入输入

    在参照this问题 正如您所看到的 我设法运行该程序并从该程序接收数据 然而 我没有设法向它提交数据 例如 在转换文件时 按q立即停止转换并停止程序 我需要我的应用程序也支持停止该过程 我认为这应该通过将此参数传递给 ffmpeg 应用程序
  • 在 PrimeNG 中单击多选下拉列表内的字段时禁用多选下拉列表关闭

    我正在处理一个使用 PrimeNG 多重选择的需求 该多选有复选框 后面跟着一些文本和徽标 单击徽标后 我将在弹出窗口中显示一些数据 单击弹出窗口的 确定 按钮时 背景多选将关闭 其中我需要禁用单击徽标时关闭弹出窗口 这里是 stackbl
  • 将通用应用程序作为缩放的 iPhone 应用程序运行?

    我已经看到了大量有关将 iPhone 和 iPad 应用程序合并为通用应用程序的问题和答案 但这不是我想要做的 我要做的是在应用程序购买中使用来解锁 iPad 界面 然后使用条件显示正确的界面 如果购买了该界面 应用程序将显示 iPad 笔
  • Firefox 中的 window.onbeforeunload 支持

    我在 JavaScript 中使用 window onbeforeunload 这在 IE 中完美运行 但在 Firefox 中不会触发 我检查了 stackoverflow 中的不同链接 在其中我读到 firefox 不支持 window
  • 强制对声明进行函数评估

    我有一个函数f x y z Limit g x eps y z eps gt 0 我绘制f x y z 在下一步中 早些时候 我曾经评估极限并复制定义中的表达式f 我试图一步完成这一切 然而 只有当我尝试绘制时 才会对极限进行评估f 因此
  • 将 jQuery流沙与 fancybox 结合使用时出现问题

    我正在使用流沙 jQuery 的这个例子 制作精美的 HTML5 作品集 现在 我想在单击图像时打开灯箱 为此 我使用 fancybox jQuery 但问题在于这个 Making a Beautiful HTML5 Portfolio q
  • 由外键控制的值

    我在 SQL Server 中有一个非常简单的数据库 包含以下三个表 Theater ID is3D 其他值 Show ID Theater ID Movie ID date time 其他值 Movie ID is3D 其他值 我想确保3
  • Java-分割字母数字字符串

    输入示例 RC23 CC23QQ21HD32 BPOASDf91A5HH123 输出示例 RC 23 CC 23 QQ 21 HD 32 BPOASDf 91 A 5 HH 123 字母部分和数字部分的长度不固定 我知道如何将 split
  • 带有局部变量的 Mockito

    我有一个简单的方法 返回一个String 它还创建了一个本地List 我想测试一下给本地带来的附加值List 这是一个例子 package com impl import java util ArrayList import java ut
  • Android:setSelection 对 Spinner 没有影响

    我在 Spinner 上使用 setSelection 时遇到一些问题 我将值设置为在代码中显示微调器时预先选择 但它没有任何效果 并且始终选择列表中的第一个替代项 代码如下所示 LayoutInflater li LayoutInflat
  • 在 Flash 中,当 e4x 语句存储在字符串中时,我将如何运行该语句?

    所以我有这样的事情 var xmlStatement String xmlObject node 3 thisValue 我必须使用什么神秘函数才能执行 xmlStatement 并从该 xmlObject 获取 thisValue 喜欢
  • 统计 Android 中的应用程序使用情况

    谁能帮我确定如何计算应用程序在 Android 中的使用次数 写入 SharedPreference onCreate 这不会是一个非常准确的计数 因为 onCreate 有时会被调用 而不仅仅是应用程序启动 但它会是一个相当不错的数字 如
  • 需要将具有相同ID的多行数据转换为1行多列数据

    我回顾了已经解决的问题的版本 但是我发现的一些好的技巧 例如 在 分区 上使用rank 似乎不适用于我所在的Sybase版本 我希望运行一个程序来提取按如下方式组织的数据 电子邮件 偏爱电子邮件1 偏好XYZ电子邮件1 偏好ABC 并将其呈