【问题标题】:Table column split to two columns in sql?表列在sql中拆分为两列?
【发布时间】:2012-11-22 07:19:30
【问题描述】:

在 sql server 中,我在表中有一个列,我想在另一个表 [新表] 中创建两列中的列。你能帮帮我吗?

------------------------
  Type
  ------------------------
  UserDefine

  UserDefine

  AutoGenerate

  AutoGenerate

  UserDefine
 -------------------------

以上是我的一个表中的列,现在我想在两个表中创建列,例如 UserDefine 和 Autogenerate 列在不同的表中

  -----------------------------------
   UserDefine        | AutoGener      |
  ------------------------------------|
  UserDefine         |   AutoGenerate | 
                     |                |
  UserDefine         |   AutoGenerate |
 ---------------------------------------

如上,帮我谢谢。

【问题讨论】:

  • 不清楚你想要达到的目标更清楚

标签: sql sql-server pivot


【解决方案1】:

试试这个:

;WITH CTE
AS
(
  SELECT *, ROW_NUMBER() OVER(PARTITION BY [Type] ORDER BY [Type]) rownum
  FROM Table1
)
SELECT 
  MAX(CASE WHEN [Type] = 'AutoGenerate' THEN [Type] END) AS 'AutoGenerate',
  MAX(CASE WHEN [Type] = 'UserDefine' THEN [Type] END) AS 'UserDefine'
FROM CTE
WHERE Rownum <= 2
GROUP BY Rownum;

SQL Fiddle Demo

【讨论】:

  • @MahmoudGamal 为什么你决定使用HAVING 而不是WHERE 子句? HAVING 中没有聚合函数,因此不需要它。
  • @bluefeet - 是的,你是对的。实际上我是用一个聚合函数测试它,然后我就这样离开了。但是,如果没有 ROW_NUMBER() 和 WHERE rownum &lt;= 2 和 PIVOT 运算符,有没有其他方法可以让这个枢轴工作,它只得到两个值,因为它与 type 列分组,这就是我使用 ROW_NUMBER() 的原因然后WHERE rownum &lt; 2 消除额外的NULL 值。
  • 你必须使用 row_number() 来实现 PIVOT 但这里是 PIVOT 版本 -- sqlfiddle.com/#!3/cf6de/23
【解决方案2】:

我会使用两个插入,一个用于“UserDefine”值,另一个用于“AutoGenerate”

INSERT INTO NewTable (UserDefine) SELECT Type FROM OldTable WHERE Type = "UserDefine"

INSERT INTO NewTable (UserDefine) SELECT Type FROM OldTable WHERE Type = "AutoGenerate"

将 where 子句更改为适当的条件以区分这两种类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 2022-08-09
    相关资源
    最近更新 更多