首页 > 解决方案 > 当一组行包含布尔数据时,为具有相同 id 的一组行显示一个数值

问题描述

我正在编写 Node js 应用程序作为一种实践,并且我正在使用现有的 SQL Server 数据库(尝试重写使用相同数据库但缺乏报告灵活性的现有 .NET 前端)。

我需要查询由(guid、questionTag 和 value)组成的“调查”表。我不知道这张桌子为什么会这样设计,但我不能改变它。

guid     question   value
----------------------------
 1         q1_1     false
 1         q1_2     true
 1         q1_3     false
 1         q2_1     false
 1         q2_2     false
 1         q2_3     true
...

guid列是对另一个表的引用,该表包含有关填写调查的用户的信息。

value来自 HTML 表单,代表用户选择的单选按钮。用户被问到两个问题,每个问题有 3 个可能性。

我希望查询的最终结果将具有相同 guid 的“q1_X”行分组,并将它们的布尔值“翻译”为一个数字 - 1,2 或 3,具体取决于“true”值的位置:

guid     question   value
---------------------------
 1          q1        2
 1          q2        3

标签: sqlsql-server

解决方案


您需要字符串函数,left()例如right()charindex()

select 
  guid,
  left(question, charindex('_', question) - 1) question,
  right(question, len(question) - charindex('_', question)) value
from tablename  
where value = 'true'

演示
结果:

> guid | question | value
> ---: | :------- | :----
>    1 | q1       | 2    
>    1 | q2       | 3    

推荐阅读