【问题标题】:Choosing the right data from a table using SQL [duplicate]使用 SQL 从表中选择正确的数据 [重复]
【发布时间】:2013-06-24 10:09:12
【问题描述】:

假设我有这个表名“Stuff”

╔════╦═════╗
║ ID ║ VAL ║
╠════╬═════╣
║  1 ║ A   ║
║  2 ║ B   ║
║  3 ║ C   ║
║  4 ║ C   ║
║  5 ║ C   ║
║  6 ║ D   ║
║  7 ║ B   ║
║  8 ║ E   ║
╚════╩═════╝

我想要一个查询,它可以给我输出字母在数字中重复的位置。随意为表使用任何列名。

基本上我想要一些“C”在数字 3、4 和 5 上重复。“B”在数字 2 和 7 上重复。

在我的工作中,我有数千行。我给你的例子非常细化。如果您需要更多信息,请告诉我。

【问题讨论】:

  • 您的预期输出是什么?例如,如果您按 val 排序,则具有相同 val 的所有记录将被分组在一起,因此很容易看到每个记录与哪些 ID 相关。我猜这不是你想要的。那你呢?

标签: sql sql-server database select


【解决方案1】:

你可以试试这个:

SELECT Val, Id =
    STUFF((SELECT ' , ' + CAST( Id as varchar(20))
           FROM Stuff b 
           WHERE b.Val = a.Val 
          FOR XML PATH('')), 1, 2, '')
FROM Stuff a
GROUP BY Val;

this SQLFiddle

输出:

╔═════╦════════════╗
║ VAL ║     ID     ║
╠═════╬════════════╣
║ A   ║  1         ║
║ B   ║  2 , 7     ║
║ C   ║  3 , 4 , 5 ║
║ D   ║  6         ║
║ E   ║  8         ║
╚═════╩════════════╝

【讨论】:

  • 是的,这个,以及这里的所有其他技术:simple-talk.com/sql/t-sql-programming/…
  • @zespri - 不错的链接。谢谢。
  • @hims056 - 在您的查询中使用 GROUP BY 的 DISTINCT 是不必要的。
  • @Devart - 是的。已更正。没注意到。谢谢。
  • +1 - 为好答案。
【解决方案2】:

试试这个 -

DECLARE @temp TABLE (Id INT, Val CHAR(1))
INSERT INTO @temp (Id, Val)
VALUES
    (1, 'A'),(2, 'B'),(3, 'C'),
    (4, 'C'),(5, 'C'),(6, 'D'),
    (7, 'B'),(8, 'E')

SELECT
      Val
    , RepeatValues = STUFF((
          SELECT ', ' + CAST(ID AS VARCHAR(10))
          FROM @temp a
          WHERE a.Val = b.Val
          FOR XML PATH ('')), 1, 2, '')
FROM @temp b
GROUP BY Val

【讨论】:

    【解决方案3】:

    这样试试……

    SELECT
          name
        , STUFF((
              SELECT ',' + CAST(ID AS VARCHAR(MAX))
              FROM [stuff] a
              WHERE a.name = b.name
              FOR XML PATH ('')), 1, 1, '') AS RepeatIds
    FROM [stuff] b
    GROUP BY name
    

    【讨论】:

    • +1 - 为好答案。
    • @Devart 谢谢!!!!!!非常感谢您让我的回答看起来很有趣……也感谢您的编辑……
    • 也最好使用VARCHAR(<max_length_of_your_datatype>)而不是VARCHAR(MAX)。不客气@AmitSingh :)。
    • @Devart 我不确定给定数据类型的长度...所以我将其视为最大值...它会产生影响吗??
    • 这并不重要,但在你的情况下分配的内存比你真正​​需要的要多。
    猜你喜欢
    • 2015-05-15
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    • 2022-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多