首页 > 解决方案 > SQL 行操作

问题描述

我的表中有这种数据:

----------------------------------------
|      price  |  category | categoryID |
----------------------------------------
| 50,100,150  |   Pants   |     1      |
----------------------------------------
| 30,60,90    |   Polo    |     2      |
----------------------------------------

然后我想把它们放在单独的行中,如下所示:

    ----------------------------------------
    |      price  |  category | categoryID |
    ----------------------------------------
    |       50    |   Pants   |     1      |
    ----------------------------------------
    |      100    |   Pants   |     1      |
    ----------------------------------------
    |      150    |   Pants   |     1      |
    ----------------------------------------
    |       30    |   Polo    |     2      |
    ----------------------------------------
    |       60    |   Polo    |     2      |
    ----------------------------------------
    |       90    |   Polo    |     2      |
    ----------------------------------------

我怎么可能在 MS SQL 中做到这一点?我目前正在尝试使用 XML 路径,但无法使用多列。

谢谢你。

标签: sqlsql-serversql-server-2008

解决方案


正如评论中提到的,你的设计很糟糕。但是,如果你想继续,你可以使用 STRING_SPLIT 函数。

STRING_SPLIT:一个表值函数,它根据指定的分隔符将字符串拆分为多行子字符串。

更多信息:https ://docs.microsoft.com/en-us/sql/t-sql/functions/string-split-transact-sql?view=sql-server-2017

SELECT value AS price,
       category,
       categoryid
FROM   tableName
       CROSS apply STRING_SPLIT(price, ',')  

使用此参考资料了解有关数据库规范化的更多信息:https ://www.tutorialspoint.com/dbms/database_normalization.htm


推荐阅读