Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将多个记录合并到单个记录_Sql_Sql Server_Join - Fatal编程技术网

Sql 将多个记录合并到单个记录

Sql 将多个记录合并到单个记录,sql,sql-server,join,Sql,Sql Server,Join,基本上,我正在尝试合并两个表。 但输出似乎与JOIN创建的正常输出大不相同。 这听起来可能很愚蠢,但因为我不知道如何详细说明,所以我准备了一个快照。(单击下面的链接) 与普通JOIN语句不同的是,表“试剂\u批次\u ADDITIONALINFO”的多条记录合并为表试剂\u批次的一条记录 事先,我欠你们的人情。谢谢。遵循以下模式: SELECT lot.reagentlotid, lot.reagentlotdesc, MAX(CASE WHEN inf.attributeid =

基本上,我正在尝试合并两个表。 但输出似乎与JOIN创建的正常输出大不相同。 这听起来可能很愚蠢,但因为我不知道如何详细说明,所以我准备了一个快照。(单击下面的链接)

与普通JOIN语句不同的是,表“试剂\u批次\u ADDITIONALINFO”的多条记录合并为表试剂\u批次的一条记录

事先,我欠你们的人情。谢谢。

遵循以下模式:

SELECT
  lot.reagentlotid,
  lot.reagentlotdesc,
  MAX(CASE WHEN inf.attributeid = 'rl_a01' THEN inf.textvalue END) as rl_a01,
  MAX(CASE WHEN inf.attributeid = 'rl_a02' THEN inf.textvalue END) as rl_a02,
  ... --add more "max case when" here

FROM
  Reagent_lots lot
INNER JOIN
  reagent_lots_additionalinfo inf
    ON inf.reagentlotid = lot.reagentlotid
GROUP BY 
    lot.reagentlotid,
    lot.reagentlotdesc
在哪里。。。即,在必要时添加尽可能多的MAX CASE重复,以涵盖属性行到列的转换


Sqlserver确实有一个专有的PIVOT语法,但我倾向于使用这种模式进行数据透视,因为它在每个数据库供应商中都可以使用

Join为您提供了正确的连接工作方式输出,这是正确的,但您希望通过Join获得不同类型的输出您需要修改,因为您的行正在转换为列您需要查看Hi的可能重复项。请使用链接/图像仅为方便补充文本和/或文本中无法给出的内容。不要给出没有图例/键的图表。使用编辑函数内联,而不是链接,如果你有代表的话——使你的文章独立。@MatBailie请不要不适当地内联链接。请参阅我在上面的评论,尽可能重复使用文本。或者用代码块格式的表格文本替换到表格的链接(如果问题给出a,则应同时为创建和初始化表格的代码),或者更好,注释告诉海报这样做。如果行更适合用作列,如果假设1000,我需要手动添加case when 1 end case when 2 end.。case when 1000 end这是每个供应商(甚至是一般的数据库理论)数据库实现的基本原则,行的数量是无限可变的,列的数量是固定的/有限的。列表示数据项的不同属性。行表示不同的数据项。因此,您必须将1000个max case when语句用于表示1000列,对于任何PIVOT方法/任何查询也是如此。行用于它们的设计,列用于它们的设计。换个方向是做错了。“仅仅因为你可以,并不意味着你应该”这正是我的意思,我的意思是应该使用行作为值,列作为属性,但是如果我们有pivot,那么你的方法看起来没有用,如果有更多的行,pivot是最好的选择,也许其他一些数据库会有一些类似pivot的函数,在使用中可能会很方便。我从未见过这种将行最多视为列的用法。您似乎没有读过这个问题,也没有理解pivot isPivoting应该由前端应用程序(例如一些报表包)而不是数据库来完成。。但是,这是让数据库执行此操作的典型方法之一(使用大多数主要数据库通用的标准SQL)。JiminChoi并不是这样存储数据的,他在寻找一种方法来重新排列数据以供展示——这基本上是正确的做法,即使可能不是DB来重新排列数据