首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >类似于行到列(EAV到关系)- SQL查询,请

类似于行到列(EAV到关系)- SQL查询,请
EN

Stack Overflow用户
提问于 2011-12-15 15:47:16
回答 2查看 255关注 0票数 0

我的数据集与EAV格式不完全相同,但有些相似;以下是数据:

我需要的格式如下:

对于每个EN_NO组,我需要上述格式的数据。如果EN_NO上的组>1,则呼吸产品密钥应转到呼吸产品列,否则不转(例如,EN_NO 4和5)。

我希望我说得够清楚了。数据在Qracle表中,请建议查询以获取我需要的格式的数据。

谢谢,普拉卡什

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-15 16:31:34

我强烈建议更改您的表结构。目前,您将两条信息绑定到一个字段中。这是一个SQL反模式,破坏了Oracle使用某些优化的能力。

相反,请考虑将"PROD_KEY“拆分为两个字段(PRODUCT_TYPE = Prod_A等) (SUB_PRODUCT_ID = 1,2,3等)。或者,为了减少对整个数据库的潜在更改,只需将PRODUCT_TYPE添加到当前表中即可。

也就是说,使用您当前的结构...

代码语言:javascript
运行
复制
SELECT
  EN_NO,
  PROD_KEY,
  CASE WHEN (EN_NO < 4) AND (LEFT(PROD_KEY, 6) = 'Prod_A') THEN PROD_KEY ELSE NULL END AS Prod_A,
  CASE WHEN (EN_NO < 4) AND (LEFT(PROD_KEY, 6) = 'Prod_B') THEN PROD_KEY ELSE NULL END AS Prod_B,
  CASE WHEN (EN_NO < 4) AND (LEFT(PROD_KEY, 6) = 'Prod_C') THEN PROD_KEY ELSE NULL END AS Prod_C,
  PROD_QTY
FROM
  yourTable

当您明确知道需要哪些列作为输出时,这是有效的。如果您需要代码来适应Prod_D等,那么您需要编写代码来编写代码(Dynamic SQL)。

票数 0
EN

Stack Overflow用户

发布于 2011-12-15 16:38:28

您所显示的是一个数据透视表。如果您想要一个能够自动添加与表中不同数据值对应的列的查询,那么您就不走运了。SQL不支持这一点;在准备查询时--在读取表中的任何数据值之前,列必须是已知的并且是固定的。

为此,您需要获取不同的prod_key值(或者说直到:字符的子字符串)的列表:

代码语言:javascript
运行
复制
SELECT DISTINCT LEFT(PROD_KEY, 6) FROM yourTable;

然后编写应用程序代码,将这个值列表转换为动态SQL语句中的一系列列表达式,就像@Dem提到的那样。

另一种选择是获取存在于表中的原始数据,然后编写应用程序代码对其进行迭代,并将其分组为表格报表,一次一个数据值。

无论哪种方式,您都需要编写应用程序代码,除非您已经知道要获取的不同prod_key类型的列表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8516710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档