如何将不同列的值合并为一列而不重复值?

时间:2016-03-23 13:20:38

标签: sql sql-server

正确的超级极客......这就是让我感到自杀的场景!

我有这个问题:

SELECT
BIRMINGHAM.TOS, 
BIRMINGHAM.Percentage, 
CARDIFFREGUS.TOS AS Expr1, 
CARDIFFREGUS.Percentage AS Expr2

FROM
BIRMINGHAM  RIGHT OUTER JOIN
CARDIFFREGUS ON BIRMINGHAM.TOS = CARDIFFREGUS.TOS

这是我得到的结果:

  

TOS Percentage Expr1 Expr2 100.00% 100.00% 0.07% 100.00% default (DSCP 0) 61.37% default (DSCP 0) 61.74% af33 (DSCP 30) 11.49% af33 (DSCP 30) 15.44% af31 (DSCP 26) 8.86% af31 (DSCP 26) 13.85% af11 (DSCP 10) 15.22% af11 (DSCP 10) 4.63% ef (DSCP 46) 1.91% ef (DSCP 46) 3.72% NULL NULL cs6 (DSCP 48) 0.23% cs4 (DSCP 32) 0.15% cs4 (DSCP 32) 0.20% cs3 (DSCP 24) 0.06% cs3 (DSCP 24) 0.11% af21 (DSCP 18) 0.05% af21 (DSCP 18) 0.05% af41 (DSCP 34) 0.70% af41 (DSCP 34) 0.03% 100.00% 0.02% 0.07% 0.02%

正如您所看到的,TOS和Expr1列的某些值是相同的。 百分比和expr2列分别是TOS和expr1列的对应值。

我需要的是将TOS和Expr1列的值显示为1列,但所有值必须在那里一次(不重复相同的值)然后我需要显示百分比和expr2列的值在“新”创建的列(TOS + Expr1)旁边,它们各自与TOS和expr1列的原始值有关。

百分比和expr2列需要彼此独立地重新组合。

1 个答案:

答案 0 :(得分:1)

SELECT
COALESCE(BIRMINGHAM.TOS,CARDIFFREGUS.TOS) AS [NewColumn], 
BIRMINGHAM.Percentage,  
CARDIFFREGUS.Percentage AS Expr2

FROM
BIRMINGHAM  RIGHT OUTER JOIN
CARDIFFREGUS ON BIRMINGHAM.TOS = CARDIFFREGUS.TOS

编辑:

请注意,您将无法查看CARDIFFREGUS中与JOIN条件不匹配的记录。如果您也想查看此类记录,请使用FULL OUTER JOIN。

有关COALESCE()的更多信息:COALESCE MSDN

我不确定您的评论中“网站”的含义。如果你的意思是更多的表,添加另一个JOIN条件并在COALESCE函数中包含NewTable.TOS列。