【问题标题】:getting results of distinct columns in to a single column将不同列的结果放入单个列
【发布时间】:2013-08-22 15:56:57
【问题描述】:

我有一张桌子:

col1     col2     ...     Plastname     Pfirstname     Clastname      Cfirstname
1        abc              Smith         John           Robinson       Bob
2        xyz              Smith         John           Jones          Michael
3        bda              Robinson      Bob            Smith          John

我想要的是一个不同名称的列表,例如:

col1
Smith, John
Robinson, Bob
Jones, Michael

我已经尝试过联合做:

select distinct Plastname + ', ' + Pfirstname as name from table
union
select distinct Clastname + ', ' + Cfirstname as name from table

但这并没有给我 clastname 和 cfirstname 的。

我也尝试过使用 distinct 和 group by 的各种尝试,但没有任何效果。

非常感谢任何建议或指导!

【问题讨论】:

  • 什么平台? PostgreSQL、SQL Server、MySQL、Oracle?
  • sql-server,谢谢。更新的问题。

标签: sql sql-server group-by distinct


【解决方案1】:

也许有一个子查询,它将所有四列成对连接起来,并在结果上加上一个GROUP BY

SELECT X.NAME FROM
(
    SELECT Plastname + ', ' + Pfirstname AS NAME
    FROM People
    UNION ALL
    SELECT Clastname + ', ' + Cfirstname AS NAME
    FROM People
) X
GROUP BY X.NAME
ORDER BY X.NAME

DEMO

甚至更简单:将UNION ALL 替换为UNION 以消除重复:

SELECT Plastname + ', ' + Pfirstname AS NAME
FROM People
UNION 
SELECT Clastname + ', ' + Cfirstname AS NAME
FROM People

DEMO

【讨论】:

  • 它应该使用UNION 而不是UNION ALL。如果您使用ALL,“Robinson, Bob”将是一个骗子。
  • @Declan_K:我已经补充过了,我一开始想的太复杂了:)
  • @decken_k:你看到第一种方法的 group by 了吗?
  • 是的,但如果你只使用UNION,那是多余的。
  • 我想 +1 这只是为了花哨的演示按钮! :)
【解决方案2】:

我检查了您的查询,它工作正常http://sqlfiddle.com/#!3/bac7f/4
但建议将每行四列分隔成两行两列。

SQLServer2008+ 上的示例

SELECT DISTINCT o.lastname + ', ' + o.firstname AS name
FROM dbo.test142 t 
  CROSS APPLY(
              VALUES(Plastname, Pfirstname),
                    (Clastname, Cfirstname)
              ) o(lastname, firstname)

SQLFiddle上查看演示

【讨论】:

    猜你喜欢
    • 2017-12-20
    • 2022-11-16
    • 1970-01-01
    • 2012-09-11
    • 2023-02-03
    • 2022-11-18
    • 2015-03-11
    • 1970-01-01
    • 2019-12-18
    相关资源
    最近更新 更多