If group_concat does not return a value, is there any solution?
P粉212971745
P粉212971745 2023-08-30 19:44:24
0
2
472

我写了一个查询,根据条件将几行转换为列。

然而,有些情况下没有行满足条件,但我希望返回一些结果。

下面是表格的示例和我要寻找的结果。

源表:

id respondent_id 人口统计 问题 回答
1 1 已检查 年龄 30
2 1 教育 硕士
3 1 已检查 身高 1.8m
4 1 收入 $1
5 1 地址 国际空间站
6 1 才艺 跳舞
7 2 已检查 年龄 20
8 2 教育 高中
9 2 已检查 身高 4m
10 2 收入 $3.2
11 2 地址 高海
12 2 才艺 唱歌

转换后的示例结果:

id respondent_id 年龄 身高 问题 答案
2 1 30 1.8m 教育 硕士
4 1 30 1.8m 收入 $1
5 1 30 1.8m 地址 国际空间站
6 1 30 1.8m 才艺 跳舞
8 2 20 4m 教育 高中
10 2 20 4m 收入 $3.2
11 2 20 4m 地址 高海
12 2 20 4m 才艺 唱歌

当前的MySQL语句:

SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( '(SELECT l.answer FROM source_table l where l.respondent_id = a.respondent_id AND l.question = ', b.question,') AS ',b.question ) ) INTO @sql FROM source_table b WHERE b.demographic IS NOT NULL; SET @sql = CONCAT('SELECT respondents_id, ',@sql,', a.question , a.answer FROM source_table a WHERE a.demographic IS NULL GROUP BY id '); PREPARE stmt FROM @sql; EXECUTE stmt;

为了澄清,上述查询在有“checked”的人口统计列时有效,但是当没有“checked”单元格时,整个查询失败。

因此,我希望有一个查询在所有情况下都能工作,无论是否有人口统计行。

如果没有人口统计行,则查询应该返回没有新列的数据。

P粉212971745
P粉212971745

reply all (2)
P粉043295337

I'm a little confused why you want to use dynamic SQL. Window functions seem to do what you want:

select t.* from (select t.*, max(case when question = 'Age' then answer end) over (partition by respondent_id ) as age, max(case when question = 'height' then answer end) over (partition by respondent_id ) as height from source_table st ) t where demographic is null;

If you don't know the "checked" column, I think you can use this as a template.

    P粉823268006

    @FaNo_FN @ysth

    I successfully fixed it using the fiddle you posted and your comment.

    I added the following code between the two queries to check if the variable is set.

    SET @sql := IF(@sql IS NULL,'',@sql);

    I also added a secondCONCAT()beforeGROUP_CONCATto add a ',' separator.

    This is the link tofiddle.

      Latest Downloads
      More>
      Web Effects
      Website Source Code
      Website Materials
      Front End Template
      About us Disclaimer Sitemap
      php.cn:Public welfare online PHP training,Help PHP learners grow quickly!