SQL Server - 尝试对我的表进行非规范化

2024-04-04

对标题表示歉意,但我正在尝试做超出我水平的事情,甚至让我来解释它。

假设我有一个包含变量 person、foods 和 amount 的表:

 Person  food     Amount
 Mike    Butter   3
 Mike    Milk     4
 Mike    Chicken  2
 Tim     Milk     4
 John    Chicken  2

通过在查询中将表与其自身连接起来,我成功地创建了一个列表,其中食物是新变量的基础,值是数量。上表将变为:

Person  Butter Milk Chicken
Mike    3      4    2

代码大约是:

Select 
    a.person, 
    b.amount as Butter,
    c.amount as Milk, 
    d.amount as Chicken
from PersonFoodAmount a
inner join PersonFoodAmount b on a.person = b.person
inner join PersonFoodAmount c on a.person=c.person
where b.food='Butter' 
and c.food='Milk'
and d.food='Chicken'

现在,这给了我迈克,因为他勾选了所有复选框。但我还需要部分匹配:

Person  Butter Milk Chicken
Mike    3      4    2
Tim     NULL   4    NULL
John    NULL   Null 2

我尝试过各种连接,包括完整的外部连接,但我仍然只得到冰箱装满的人。

有什么建议么?


您可以使用 Pivot 来实现此目的。

DECLARE @PersonStuff TABLE (Person varchar(10), Food varchar(10), Amount INT)

INSERT INTO @PersonStuff VALUES
('Mike','Butter', 3),
('Mike','Milk', 4),
('Mike','Chicken', 2),
('Tim','Milk', 4),
('John','Chicken', 2)

SELECT 
    * 
FROM ( 
    SELECT 
        * 
    FROM @PersonStuff ) AS SourceTable
PIVOT ( 
    AVG(Amount) 
    FOR Food IN ( [Butter],[Milk],[Chicken] ) 
) AS PivotTable

Result:

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

SQL Server - 尝试对我的表进行非规范化 的相关文章

随机推荐

  • 将双精度十进制转换为十六进制、二进制和八进制字符串

    是否有一个自定义或标准库可以与 Objective C 一起使用 将十进制浮点值转换为十六进制 二进制和八进制 NSString 我一直在四处寻找 但只能找到如何通过使用以下方法转换另一个方向 从其他方向转换为十进制 double resu
  • 数组排序不起作用

    我有一组对象正在尝试排序 但它似乎不起作用 数组中的某些对象具有orderNum我要排序的属性 但并不是所有的物体都具有这个属性 我想要带有以下内容的对象orderNum要排序到数组顶部位置的属性 这是我尝试过的小提琴 http jsfid
  • Android 材料设计复制工具栏面包屑示例

    我正在尝试复制面包屑示例 我已经将 TextView 添加到工具栏 但无法完全复制工具栏样式的字体 大小 颜色 并且无法让面包屑从屏幕左侧浮动 您将需要创建自己的面包屑视图并将其添加到工具栏中 也许基于现在已弃用的碎片面包屑 https d
  • React Native 的 panResponder 的 useState 的价值已经过时了吗?

    我需要读取的值useState in onPanResponderMove 页面加载时onPanResponderMove正确记录初始值0 但是当我点击之后TouchableOpacity增加foo the onPanResponderMo
  • 如何合并所有子目录中同名的文本文件?

    我有几个包含文件的文件夹 文件可以具有相同的名称 我想将文件连接到每个名称之一 提前致谢 EDIT 抱歉 您能给我看一下它的批处理文件吗 合并 bat echo off for every text file in the sub dirs
  • 是一个在给定上下文错误中无效的“方法”

    这是 Head First CSharp 第 113 页 的示例 我收到以下错误 错误 1 Guys Form1 joesCashLabel object System EventArgs 是一种 方法 在给定上下文中无效 c temp G
  • Instagram 的 GET/tags//media/recent 分页实际上是如何工作的?

    我正在尝试使用实时照片更新 http instagram com developer realtime 用于获取带有特定标签的所有图片的 API 因为此 API 的更新实际上只告诉您that新内容存在 但不存在 what是的 每当我收到某些
  • 同一命名空间中的包:无法在安装脚本中导入模块

    我很好奇下面的情况 假设我有两个名为project alpha and project bravo 都定义了顶级命名空间包mymeta 布局 project alpha gt mymeta gt init py gt project alp
  • NamedParameterJdbcTemplate - 从以下位置选择 *

    在 Spring 的 NamedParameterJdbcTemplate 中 如何使用 Spring 版本 3 1 x 执行 Select from Student 的查询以返回列表而不提供任何参数 根据http docs spring
  • C# ImageBox 在 MouseUp 上清除矩形

    我有一个面板 其中包含在运行时创建的多个图片框 用户将在任何图片框上创建一个矩形 所选部分将显示在预览图片框上 我已经使用下面的代码成功完成了上述操作 Question 我想在 mouseup 事件中清除选择矩形 使用无效但不起作用 从如何
  • Visual Studio 远程调试扩展性

    我正在尝试使用类似于以下的代码连接到远程计算机 Debugger2 db Debugger2 dte Debugger Transport trans db Transports Item Default Process2 proc2 Pr
  • 如何从源代码构建适用于 iOS 的 libssl.a?

    I have a project referenced to libSSL a in xcode 5 so I try to build it myself error message of make command is this 我做了
  • 如何将容器 div 及其所有内容缩放到特定大小?

    我创建了一个 100 浏览器 宽度的 HTML 页面 其中包含很多内容 内容在页面中是固定的 其大小均以像素和百分比为单位 现在我需要添加20 浏览器宽度的广告面板 并且想要将页面容器及其所有内容 包括文本 缩放至 80 就像所有网络浏览器
  • 在 Fluent NHibernate 中使用鉴别器

    我正在尝试创建一个鉴别器列 该列将保存许多可用状态之一 就像我的代码将显示的那样 每个状态都有一个名称和背景颜色 每个状态共享相同的基类 这是我的代码 public class Item public virtual int Id get
  • Oracle SQL 中时间戳转换为 EPOCH 时间

    我在表 22 03 2022 06 59 59 中输入日期作为列 我需要转换成 EPOCH 时间 预期输出 1647932399 时区 印度尼西亚雅加达 参考链接 https www epochconverter com https www
  • ElasticBeanstalk - 应用程序更改未显示

    我正在使用 Elasticbeanstalk 在 AWS 上托管一个应用程序 我正在使用工具带从本地计算机推送我的应用程序 直到几周前 一切都工作正常 但最近我的更改没有生效 我可以在 aws 管理控制台中看到我的应用程序正在推送和部署 但
  • bash 从这里运行脚本 doc [重复]

    这个问题在这里已经有答案了 在下面的代码中 变量X正常输出 cat a sh X world echo hello X cat a sh bash hello world 但是 使用here doc 变量X不会显示 cat lt
  • 列出稀疏文件中的所有空洞和数据段

    我正在尝试实现一个程序 它可以使用以下命令打印常规稀疏文件中的所有孔和数据段lseek 2 及其论点SEEK DATA and SEEK HOLE 类似于 list hold and data segs sparse file This f
  • Grails: .save(flush:flush, insert:true) 与 .save(flush:true) 有何不同

    在spring security生成的类中UserRole or SecUserSecRole 你可以随意称呼它 有一个命令可以创建一个new UserRole 并保存它 save flush flush insert true 这意味着什
  • SQL Server - 尝试对我的表进行非规范化

    对标题表示歉意 但我正在尝试做超出我水平的事情 甚至让我来解释它 假设我有一个包含变量 person foods 和 amount 的表 Person food Amount Mike Butter 3 Mike Milk 4 Mike C