【问题标题】:sql query to display the input datasql查询显示输入数据
【发布时间】:2011-06-24 18:45:18
【问题描述】:

我想要一个 SQL 查询来显示以下数据

输入数据:

ID  GroupID     Data
 1     1        Hello
 2     1        Null
 3     1        Null
 4     1        World
 5     2        Niladri
 6     2        XXX
 7     2        Null
 8     2        PPP
 9     2        Null
10     2        Null
11     2        Null
12     2        LLL

作为

输出数据:

GroupID   MergedData
   1          Hello2World   
   2          NiladriXXX1PPP3LLL

我需要对GroupID上的数据进行分组,并将结果显示为Hello2World

-->Hello is related to GroupID 1
-->2 is count of NULLS
-->World is related to GroupID 1

对于 GroupID 2 也是如此。

请推荐?

谢谢

【问题讨论】:

  • 打哈欠,看不懂你的帖子。 ;P
  • 我编辑了你的帖子;格式化时请小心,以便其他人有机会理解您:-)
  • 您可能想看看this thread 中的(到目前为止)单一答案。

标签: sql-server


【解决方案1】:

由于您没有提到您的 DBMS,这是 PostgreSQL 的解决方案:

SELECT groupid, 
       string_agg(temp_data,'')
FROM (
  SELECT id,
         groupid, 
         data,
         CASE 
           WHEN data IS NULL 
              THEN cast(max(rn) over (partition by groupid, data) as varchar)
           ELSE data
         END AS temp_data,
         row_number() over (partition by groupid, data) as group_rn
  FROM (
    SELECT id,
           groupid,
           data,
           CASE 
             WHEN data IS NULL 
                THEN row_number() over (partition by groupid,data)
             ELSE NULL
           END AS rn
    FROM foo
  ) t1
  ORDER BY id
) t2 
WHERE group_rn in (0,1)
GROUP BY groupid

如果您的 DBMS 支持 ANSI 窗口函数并且具有类似 string_agg() 函数的功能,那么它也应该可以移植到您的 DBMS。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-10
    • 1970-01-01
    • 2010-10-26
    • 2020-09-15
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多