mysql 行到列,文本类型

发布于 2024-09-15 23:58:24 字数 767 浏览 8 评论 0原文

如果我有一个数据表,例如

Option_id|Component_id|Option_parent|Option_name|Option_value
1         1            0             id          
2         1            1             option1     Some value
3         1            1             option2     Other
4         1            0             id          Value
5         1            4             option1     More
6         1            4             option2     More&More

在提供要选择的“选项名称”和组件 ID 时是否可以返回以选项名称作为列的行。带有“id”的 option_name 将是使用它的“option_id”的父项。

So Select option1, option2 where Component_id = 1 returns

Option1    |Option2
Some Value  Other
More        More&More

我基本上是想看看是否可以有一个通用表,可供组件使用来存储不同数量的数据。我知道我可以使用联接,但想知道是否有更好的方法,因为一个组件可以有 10 个选项。

If i have a table of data like

Option_id|Component_id|Option_parent|Option_name|Option_value
1         1            0             id          
2         1            1             option1     Some value
3         1            1             option2     Other
4         1            0             id          Value
5         1            4             option1     More
6         1            4             option2     More&More

Is it possible to return rows with the option_name as columns when providing the "option_name" to select and the component_id. The option_name with "id" will be the parent using it's "option_id".

So Select option1, option2 where Component_id = 1 returns

Option1    |Option2
Some Value  Other
More        More&More

I'm basically trying to see if i can have a generic table that can be used by components to store varying amounts of data. I know i can use joins but wondered if there might be a better way as one component could have 10 options.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

乖乖 2024-09-22 23:58:24

使用:

  SELECT MAX(CASE WHEN t.option_name = 'option1' THEN t.option_value END) AS option1,
         MAX(CASE WHEN t.option_name = 'option2' THEN t.option_value END) AS option2
    FROM TABLE t
   WHERE t.option_name IN ('option1', 'option2')
GROUP BY t.component_id, t.option_parent

Use:

  SELECT MAX(CASE WHEN t.option_name = 'option1' THEN t.option_value END) AS option1,
         MAX(CASE WHEN t.option_name = 'option2' THEN t.option_value END) AS option2
    FROM TABLE t
   WHERE t.option_name IN ('option1', 'option2')
GROUP BY t.component_id, t.option_parent
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文