2015-09-07 66 views
0

我该如何解决以下问题?Msg 512,Level 16错误

Msg 512,Level 16,State 1,Line 1子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或当子查询用作表达式时,这是不允许的。该语句已终止。

我试图让频率,如:

| Frequency 
| 19 
| 23 

但不知何故,我不能将烘焙查询得到比我更值:

SELECT ts.TimeDifference/ ts.EntryAmount as Frequency 
FROM 
(
    SELECT COUNT(*) as EntryAmount, 
    (
     SELECT DATEDIFF(d, t.minimum, t.maximum) 
     FROM (SELECT max(Date) AS maximum, min(Date) AS minimum FROM Times GROUP BY column1, column2, column3, column4 HAVING COUNT(*) > 1) t 
    ) AS TimeDifference 
    FROM Times 
) ts 

谢谢。

回答

1

你内心的子选择将返回不止一个结果。您将得到第1,2,3和4列的最小和最大PER组合。摆脱子选择,它将解决问题。

SELECT 
    DATEDIFF(d, ts.minimum, ts.maximum)/ ts.EntryAmount as Frequency 
    ,ts.column1, ts.column2, ts.column3, ts.column4 
FROM 
(
    SELECT 
     COUNT(*) as EntryAmount, 
     max(Date) AS maximum, 
     min(Date) AS minimum, 
     column1, column2, column3, column4 
    FROM Times 
    GROUP BY column1, column2, column3, column4 
    HAVING COUNT(*) > 1 
) ts 
+0

哇谢谢你。有用! –

0

您可以使用聚合函数:

SELECT ts.TimeDifference/ ts.EntryAmount as Frequency 
FROM 
(
    SELECT COUNT(*) as EntryAmount, 
    (
     SELECT Max(DATEDIFF(d, t.minimum, t.maximum)) 
     FROM (SELECT max(Date) AS maximum, min(Date) AS minimum FROM Times GROUP BY column1, column2, column3, column4 HAVING COUNT(*) > 1) t 
    ) AS TimeDifference 
    FROM Times 
) ts 
相关问题