SQL Server子查询返回了多个值;在不同条件下两次选择同一行;

秋井

我尝试运行以下查询:

SELECT DISTINCT person_pin AS Pin, att_date AS DailyDate,
    (SELECT MAX(att_time) FROM dbo.att_transaction WHERE att_state = 0 GROUP BY person_pin) 
    AS MaxTime,
    (SELECT MIN(att_time) FROM dbo.att_transaction WHERE att_state = 1 GROUP BY person_pin) 
    AS MinTime
FROM dbo.att_transaction
WHERE att_verify IN (4, 15)

我收到以下错误:

Msg 512, Level 16, State 1, Line 1
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

当我不带以下查询运行查询:GROUP BY person_pin时,它运行无误,但得到以下结果:

在此处输入图片说明

它获取整个列的最小值或最大值。

我需要它来获取每天每位用户的最小值和最大值。

但是,最小值只能从att_state为0的行中获取,而att_state为1的行中可以获取最大值。

我要查询的表如下所示:

id  person_pin  att_date     att_time     att_state
---|-----------|------------|------------|---------
1  | 123       | 2018-09-18 | 15:11:03   | 1 
2  | 123       | 2018-09-18 | 10:05:32   | 0
5  | 234       | 2018-09-24 | 14:05:16   | 1
3  | 234       | 2018-09-24 | 13:05:55   | 1
4  | 123       | 2018-09-24 | 12:10:42   | 0
6  | 123       | 2018-09-24 | 12:15:35   | 0
7  | 234       | 2018-09-24 | 12:05:32   | 1
8  | 123       | 2018-09-24 | 10:05:33   | 1

我也尝试过:

SELECT DISTINCT tt.person_pin AS Pin, tt.att_date AS DailyDate
FROM dbo.att_transaction tt
INNER JOIN
    (SELECT person_pin,
    (SELECT MAX(att_time) FROM dbo.att_transaction WHERE att_state = 0 GROUP BY person_pin) 
    AS MaxTime,
    (SELECT MIN(att_time) FROM dbo.att_transaction WHERE att_state = 1 GROUP BY person_pin) 
    AS MinTime
    FROM dbo.att_transaction
    GROUP BY person_pin) groupedtt 
ON tt.person_pin = groupedtt.person_pin

但它只会返回:

在此处输入图片说明

我需要它返回每个用户每天的最小和最大时间。但是,最短时间只能从att_state为0的行中获取,而最大时间只能从att_state为1的行中获取

需要帮助;

D-Shih

您可以尝试使用条件汇总函数来实现。

SELECT MIN(CASE WHEN att_state = 1 then att_time end) MaxTime,
       MAX(CASE WHEN att_state = 0 then att_time end) MinTime,
       person_pin,
       att_date     
FROM dbo.att_transaction 
WHERE t2.att_verify IN (4, 15)
GROUP BY person_pin,
         att_date     

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

对于使用ORDER BY的同一查询的两次运行,SQL能否返回不同的结果?

SQL查询两次返回同一行数据

SQL Server子查询返回了多个值。当尝试从另一个选择插入子查询时,这是不允许的

SQL查询“子查询返回了多个值”

SQL查询返回两次值

SQL-从同一表中两次选择行而不使用UNION

SQL Server错误:子查询返回了多个值

SQL Server-子查询返回了多个值。这是不允许的错误

SQL在不同条件下多次选择同一列

SQL:根据不同的WHERE条件两次选择同一表列

SQL查询如何在不同条件下将同一表中两列的值相除

SQL存储过程运行两次选择并返回一个值

SQL子查询返回了多个值

子查询中的SQL AVG-导致“子查询返回了多个值。”

SQL Server子查询返回了多个值。当子查询后跟(字符)或将子查询用作表达式时,这是不允许的

使用两个WHERE条件从同一张表中两次选择一列SQL SERVER

SQL插入错误-“子查询返回了多个值”

SQL查询同一列两次

子查询在SQL SErver 2008中返回了多个值

SQL嵌套选择-子查询返回了多个值-

在SQL查询中两次获得同一行中的同一列

SQL:在一个查询中两次选择同一列?

SQL Server子查询返回了多个值。当子查询使用触发器遵循=,!=,<,<=,>,> =时,这是不允许的

SQL在不同条件下在一列中选择多个值

SQL Server-子查询返回了多个值

不同 where 条件下的 SQL Server 连接查询性能

SQL返回重复行但在两次引用同一个表时列值翻转

SQL 查询从键表中选择多个条目到同一行的不同列中

如何在sql-server的子查询中选择列名不同的第一行?