2017-01-22 101 views
0

我有这样的SQL表,如何获得SQL格式化输出

Column_TEAM 
AUS 
USA 
IND 
RUS 

预期输出(一个团队可以对其他球队只能玩一次)

AUS vs USA 
AUS vs IND 
AUS vs RUS 
USA vs IND 
USA vs RUS 
IND vs RUS 

我以秩尝试( )功能,没有成功。 可以请帮我在SQL Server或PostgreSQL中

回答

3

您需要自行加入你的表如下:

-- SQL Server concatenation syntax 
SELECT a.Column_TEAM + ' vs ' + b.Column_TEAM 
FROM my_table a 
JOIN my_table b ON a.Column_TEAM < b.Column_TEAM 

-- PostgreSQL concatenation syntax 
SELECT a.Column_TEAM || ' vs ' || b.Column_TEAM 
FROM my_table a 
JOIN my_table b ON a.Column_TEAM < b.Column_TEAM 
+0

谢谢卢卡斯。 我从来没有用过<加入。新来学习:) –

+0

@ Ananda-SteelTownBoy你也可以使用'CROSS JOIN'(我猜这对你来说也是新的);和'WHERE a.Column_TEAM <> b.Column_TEAM' –

+0

@ Ananda-SteelTownBoy:是的,连接是一个有趣的话题。 [我最近写了一篇关于各种不同连接类型的文章](https://blog.jooq.org/2017/01/12/a-probably-incomplete-comprehensive-guide-to-the-many-different -ways到加入桌式SQL /) –

1

你也可以做它用一个简单的内部联接为好。这里你去...

SELECT T2.CTRY2,T1.CTRY1 
FROM 
(SELECT CTRY AS CTRY1,ROW_NUMBER() OVER(ORDER BY CTRY) AS R1 FROM (VALUES ('AUS'),('USA'),('IND'),('RUS')) CT (CTRY)) T1 

JOIN 

(SELECT CTRY AS CTRY2,ROW_NUMBER() OVER(ORDER BY CTRY) AS R2 FROM (VALUES ('AUS'),('USA'),('IND'),('RUS')) CT (CTRY)) T2 

ON T1.R1 > T2.R2 
ORDER BY T1.CTRY1 ASC