【问题标题】:@SQL With single column i need to get below mentioned output like below [duplicate]@SQL 使用单列我需要得到下面提到的输出,如下所示[重复]
【发布时间】:2015-12-22 22:32:42
【问题描述】:

我在表格中有以下数据

**TEAM NAME**
Germany
Holland 
Scotland
Brazil

我期望数据如下所示,顺序相同,请帮助

**ScheduledMatches**
Germany VS Holland
Germany VS Scoltland
Germany VS Brazil
Holland VS Scoltland
Holland VS Brazil
Scoltland VS Brazil

谢谢 维杰萨加尔

【问题讨论】:

  • 你有没有尝试过?

标签: sql sql-server


【解决方案1】:

您可以先计算每个团队的ROW_NUMBER,然后根据计算出的rn 使用< 的self join:

CREATE TABLE #teams(name VARCHAR(100));

INSERT INTO #teams(name)
VALUES('Germany'), ('Holland'), ('Scotland'), ('Brazil');

;WITH cte AS
(
  SELECT *, rn = ROW_NUMBER() OVER (ORDER BY (SELECT 1))
  FROM #teams
)
SELECT CONCAT(c1.name, ' vs ',  c2.name) AS result  
FROM cte c1
JOIN cte c2 
  ON c1.rn < c2.rn
-- ORDER BY result;

LiveDemo

CONCAT 可从SQL Server 2012+ 获得,如果您的版本较低,请使用+ 连接字符串。

【讨论】:

    【解决方案2】:
    DECLARE @t TABLE (Team VARCHAR(100))
    INSERT INTO @t (Team)
    VALUES
        ('Germany'),
        ('Holland'), 
        ('Scotland'),
        ('Brazil')
    
    ;WITH cte AS 
    (
        SELECT *, RowNum = ROW_NUMBER() OVER (ORDER BY 1/0)
        FROM @t   
    )
    SELECT t2.Team + ' vs ' + t1.Team
    FROM cte t1
    JOIN cte t2 ON t1.RowNum > t2.RowNum
    

    输出 -

    ---------------------------
    Germany vs Holland
    Germany vs Scotland
    Germany vs Brazil
    Holland vs Scotland
    Holland vs Brazil
    Scotland vs Brazil
    

    【讨论】:

      【解决方案3】:

      下面的代码对你有帮助!!!

      SELECT
          a.M +' VS '+ b.M AS [**ScheduledMatches**]
      FROM (
          SELECT *, ROW_NUMBER() OVER (PARTITION BY 1 order by 1/0) AS no
          FROM (
              VALUES ('Germany'), ('Holland'), ('Scotland'), ('Brazil')
          ) t (m)
      ) a
      JOIN (
          SELECT *, ROW_NUMBER() OVER (PARTITION BY 1 order by 1/0) AS no
          FROM (
              VALUES ('Germany'), ('Holland'), ('Scotland'), ('Brazil')
          ) t (m)
      ) b ON a.no < b.no
      

      输出:

       **ScheduledMatches**
      Germany VS Holland
      Germany VS Scotland
      Germany VS Brazil
      Holland VS Scotland
      Holland VS Brazil
      Scotland VS Brazil
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-12
        • 1970-01-01
        • 1970-01-01
        • 2021-02-03
        • 2012-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多