【问题标题】:transform data columns to rows in mySQl将数据列转换为 mySQl 中的行
【发布时间】:2011-12-19 19:40:58
【问题描述】:

我一直在搜索和阅读,但还没有找到我需要的东西。

表格

name,stuff1, stuff2, Skill1, Skill2, Skill3 ... Skill200

表中有 196 行。技能值的范围是 0-4。

我知道,没有标准化。现在它需要保持这种状态。

我要回去

姓名1,姓名2,姓名3,... 技能 1 技能 1 值,技能 1 值,技能 1 值,... 技能 2 技能 2 值,技能 2 值,技能 2 值,...

每个名字永远只有一行。

换句话说,每个名称都有一个列,每个技能有一个行(该技能的值),并带有 where 子句 - where stuff = 'something'。我不需要做每一项技能,大约 200 列中的 10-15 列。

这是 mySQL。只有 196 行

提前致谢

【问题讨论】:

  • 到目前为止您有什么尝试过的吗?有时,即使他们失败了,分享您的尝试也会有所帮助。这里的其他人也许可以从那里拿走它,进行更正,添加东西,然后让它工作..
  • 不同的东西,比如每个技能的工会等等。我想我会收集一些失败的东西。
  • SELECT skill1 as Skill1, max( CASE name WHEN 'name1' THEN Skill1 ELSE 0 END ) AS 'name1', max( CASE name WHEN 'name2' THEN Skill1 ELSE 0 END ) AS 'name2' FROM 技能表 GROUP BY 1; --好吧,这给了我一个可能的值,它很接近,但如果我确实让它卷起来它有一些问题。 1)它需要是每个技能的联合和列的硬编码名称。如果我能把它正确地卷起来(一排,而不是 6 排),我可能会忍受它
  • Hmmn.. 我可以想到动态 sql 或游标,但这些不是有效的解决方案.. 也许您可以发布一些真实数据,以便我可以获得更好的图像?

标签: mysql transform pivot


【解决方案1】:

不幸的是,对于您需要的每个列/技能,您都需要自行加入此表。不漂亮,但我认为这是 MySQL 中的唯一方法。比如:

select s1.skill1, s2.skill2, s3.skill3...
  from skills s1
  join skills s2 using (name)
  join skills s3 using (name)
 ....

【讨论】:

  • 这给了我作为专栏的技能。我需要将技能作为行,将每列作为名称。
  • 感谢您抽出宝贵时间尝试帮助我! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-06
  • 1970-01-01
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-23
相关资源
最近更新 更多