【问题标题】:SQL Concat every other Row to return a string ["FistName LastName", "FisrtName LastName"] ,SQL Concat 每隔一行返回一个字符串 ["FirstName LastName", "FirstName LastName"] ,
【发布时间】:2013-12-15 16:15:26
【问题描述】:

这超出了我的知识范围,任何帮助都会很棒!

我有一个名为 RegisteredUsers 的 SQL Server 表,其中包含 FirstNameLastName。我需要为每 2 行构建一个字符串 ["FirstName LastName", "FirstName LastName"]。我可以构建字符串,但我需要得到 ​​p>

包含第一行和第二行结果的第一行 FirstName LastName FirstName LastName 第二行包含第 3 个和第 4 个 FirstName LastName FirstName LastName 等等。

我正在尝试随机化和配对用户

我希望得到一些链接这个

Team1 | Team2
1 FN LN  | FN LN
2 FN LN  | FN LN
3 FN LN  | FN LN
4 FN LN  | FN LN

感谢您的帮助

【问题讨论】:

  • 你想如何定义对?只是任意的还是有一些领域对它们进行排序?

标签: sql sql-server concat


【解决方案1】:

您可以通过在 SQL Server 2012 中将 LEAD() 函数与 ROW_NUMBER() 结合使用来执行此操作,或者在 SQL 2008 Server 中,您可以使用 ROW_NUMBER() 函数和自联接。

SQL Server 2012:

;WITH cte AS (SELECT FN + ' ' + LN AS Team1
                    , LEAD(FN + ' ' + LN,1) OVER(ORDER BY (SELECT 1)) AS Team2
                    ,ROW_NUMBER() OVER(ORDER BY (SELECT 1))RN
              FROM Table1)
SELECT Team1, Team2
FROM cte
WHERE RN%2 > 0

演示:SQL Fiddle

SQL Server 2008:

;WITH cte AS (SELECT FN + ' ' + LN AS Team
                    ,ROW_NUMBER() OVER(ORDER BY (SELECT 1))RN
              FROM Table1)
SELECT a.Team AS Team1
      ,b.Team AS Team2
FROM cte a
JOIN cte b
  ON a.RN = b.RN-1
WHERE a.RN%2 > 0

演示:SQL Fiddle

ROW_NUMBER() 函数为每一行添加一个数字,它需要一个 ORDER BY 子句,因此如果您希望排序不是任意的,您可以将 (SELECT 1) 替换为表中的字段。

编辑:我知道你想随机化它,你可以使用ORDER BY NEWID() 来获得随机排序,但是这样做时你不能指望cte,因为它可能会导致团队 1 与团队 2 相同,但您需要使用临时表:

SELECT FN + ' ' + LN AS Team
      ,ROW_NUMBER() OVER(ORDER BY NEWID()) AS RN
INTO #t
FROM Table1
;
SELECT a.Team AS Team1
      ,b.Team AS Team2
FROM #t a
JOIN #t b
  ON a.RN = b.RN-1
WHERE a.RN%2 > 0

演示:SQL Fiddle

【讨论】:

  • 查看问题底部附近的编辑,它将提供随机配对。
  • 我明白了,再次感谢 WITH cte AS (SELECT firstname + ' ' + lastname AS Team1 , LEAD(firstname + ' ' + lastname,1) OVER(ORDER BY (SELECT 1)) AS Team2 , ROW_NUMBER() OVER(ORDER BY (SELECT 1))RN FROM RegisteredUsers) SELECT Team1, Team2 FROM cte WHERE RN%2 > 0 order by NEWID()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-25
  • 2017-06-20
  • 1970-01-01
相关资源
最近更新 更多