Sql server 在SQL中如何将数据库记录中的单列分隔为列?

Sql server 在SQL中如何将数据库记录中的单列分隔为列?,sql-server,tsql,select,Sql Server,Tsql,Select,我在SQLServer2008中有一个数据库表,表中有一列balls,例如20个balls。我想把球分成红色和非红色的球,在一个单独的列中。i、 e一列中有5个红色球,另一列中有15个黑色球 所有球都包含在表的一列中。我的问题如下 ;with r as ( SELECT [balls] FROM [balls_table] ) SELECT (SELECT balls FROM [balls_table] WHERE color LIKE '%red%') a, (SELECT balls F

我在SQLServer2008中有一个数据库表,表中有一列balls,例如20个balls。我想把球分成红色和非红色的球,在一个单独的列中。i、 e一列中有5个红色球,另一列中有15个黑色球

所有球都包含在表的一列中。我的问题如下

;with r as 
(
SELECT [balls] FROM [balls_table]
)
SELECT (SELECT balls
FROM [balls_table]
WHERE color LIKE '%red%') a,
(SELECT balls
FROM [balls_table]. 
WHERE color NOT LIKE '%red%') as b
 FROM r
我想我可以先选择整个球,然后像上面那样从第一个选择中选择红色和非红色。上面的查询返回一个异常,即子查询返回多条记录。请,如有任何帮助,将不胜感激。

试试这个

Select
CASE WHEN color = 'Red' THEN Color ELSE NULL END As Color1,
CASE WHEN color <> 'Red' THEN Color ELSE NULL END As Color2
from balls
选择
当color='Red'时,color ELSE NULL结束为Color1,
当颜色为“红色”时,则颜色为“否则为空”,结束时为“颜色2”
从球

在如下情况下尝试使用CASE:

SELECT CASE WHEN color LIKE '%red%' THEN [balls] ELSE NULL END AS RedBalls,
       CASE WHEN color NOT LIKE '%red%' THEN [balls] ELSE NULL END AS NonRedBalls
FROM [balls_table]
您可以通过如下求和得到红色球和非红色球的总数:

SELECT SUM(RedBalls) AS RedBalls , SUM(NonRedBalls) AS NonRedBalls
FROM
(
SELECT CASE WHEN color LIKE '%red%' THEN [balls] ELSE NULL END AS RedBalls,
       CASE WHEN color NOT LIKE '%red%' THEN [balls] ELSE NULL END AS NonRedBalls
FROM [balls_table]
) tt

您必须通过一个唯一的数字来组合这两列。你还必须考虑这5个球是否应该在你新桌子的开始处,在桌子的结尾处,均匀地分布等等。如果一行中没有红球,只有黑球,您希望显示什么值?@alzaimar,上面的每个子查询都会返回一个后续的记录数,我希望这些记录数位于单独的列中。我没有合并这些专栏,这让我更困惑。我想那样没问题你想达到什么目的?您可以执行以下操作-获得20行的结果,但有两列(isred和isnotred,如果球为红色或非红色,则包含1,否则包含0)。谢谢。然而,为了得到总数,我必须使用1或0。当我使用When red[balls]else 0时,我得到一个转换错误。balls字段是数值还是varchar?如果是varchar,那么您需要使用CAST()或convert()函数将其转换为numeric。谢谢您,先生。现在我想看看是否可以在一个查询中实现这两个功能。非常感谢。