2012-09-14 56 views
0

在较大的查询中有以下子查询。我收到一个错误“子查询返回了超过1个值”。我不知道我该如何解决这个问题,并且仍然有两个查询的结果发生分歧。我正在使用SQL Server 2005.子查询返回了多个值错误

谢谢。

SELECT 
    sample_fields, -- some fields here 
    (SELECT 
     c1/c2 AS department_occupancy_rate -- doing division of results of both queries 
    FROM 
     property as c 
     JOIN (
       SELECT store_id, cast(count(*) as decimal(10,2)) AS c1 
       FROM property 
       WHERE 
        non_ha =1 
       AND property_type LIKE '%587%'  
       GROUP BY store_id 
      ) AS sub1 
      ON c.store_id = sub1.store_id 
      JOIN (
       SELECT store_id, cast(count(*) as decimal(10,2)) AS c2 
       FROM property 
       WHERE 
        property_type LIKE '%587%' 
       GROUP BY store_id 
      ) AS sub2 
      ON c.store_id = sub2.store_id 
     ) as results, 
FROM 
    sample_table -- a table here 
    INNER JOIN sample_table1 
    ON sample_table2 -- joining here 
GROUP BY sample_field -- grouping 
+0

尝试SELECT TOP 1 ...或SELECT ... LIMIT 1取决于你的SQL风格。 –

+2

您是否尝试过重构该SQL?这很漂亮... –

+0

你检查了你的查询的最后一个连接 - > INNER JOIN sample_table1 ON sample_table2? – Luftwaffe

回答

2

那么,这是不清楚你想要做什么,因为在其与外部查询内部查询不相关条件。我想这应该是一个store_id,如果是的话,你应该这样做:

SELECT sample_fields,-- some fields here 
     results.department_occupancy_rate 
FROM sample_table -- a table here 
     INNER JOIN sample_table1 
       ON sample_table2 -- joining here 
     JOIN (SELECT c.store_id, 
        c1/c2 AS department_occupancy_rate 
      -- doing division of results of both queries 
      FROM property AS c 
        JOIN (SELECT store_id, 
           Cast(Count(*) AS DECIMAL(10, 2)) AS c1 
          FROM property 
          WHERE non_ha = 1 
           AND property_type LIKE '%587%' 
          GROUP BY store_id) AS sub1 
         ON c.store_id = sub1.store_id 
        JOIN (SELECT store_id, 
           Cast(Count(*) AS DECIMAL(10, 2)) AS c2 
          FROM property 
          WHERE property_type LIKE '%587%' 
          GROUP BY store_id) AS sub2 
         ON c.store_id = sub2.store_id) AS results 
     ON (sample_table.store_id = results.store_id) 
GROUP BY sample_field -- grouping