0

ここにこの長いSQLクエリがあります..

SELECT c.clientid, c.clientname, c.billingdate, 
case when (select ifnull(sum(total), 0) from invoice i
where i.client = c.clientid and i.isdeleted = 0) - (select ifnull(sum(p.amount), 0) from payment p inner join invoice i on p.invoice = i.invoiceid
where i.client = c.clientid and i.isdeleted = 0) < 0 and i.date < '2012-01-01' then (select ii.total from invoice ii where ii.client = c.clientid order by ii.invoiceid desc limit 1)  else (select ifnull(sum(total), 0) from invoice i
where i.client = c.clientid and i.isdeleted = 0) - (select ifnull(sum(p.amount), 0) from payment p inner join invoice i on p.invoice = i.invoiceid
where i.client = c.clientid and i.isdeleted = 0) end as remaining,
case c.isactive+0
        when '1' then 'Stop'
        else 'Start' 
        end as Active
FROM client c 
ORDER BY clientname

このクエリでエラーが発生し、それがフィールド リストの不明な列であるという行i.date < '2012-01-01'i.date表示されます...どうすれば修正できますか?

ありがとう、J

4

2 に答える 2

0

あなたはi.dateがサブクエリの外にいます。ここです

SELECT c.clientid, c.clientname, c.billingdate, 
CASE WHEN 
    (select ifnull(sum(total), 0) from invoice i where i.client = c.clientid and i.isdeleted = 0)
    - 
    (select ifnull(sum(p.amount), 0) from payment p inner join invoice i on p.invoice = i.invoiceid where i.client = c.clientid and i.isdeleted = 0)
    < 0 
    and i.date < '2012-01-01'  -- THIS IS NOT PART OF THE SUBQUERY
THEN 
    (select ii.total from invoice ii where ii.client = c.clientid order by ii.invoiceid desc limit 1)  
ELSE 
    (select ifnull(sum(total), 0) from invoice i where i.client = c.clientid and i.isdeleted = 0) - (select ifnull(sum(p.amount), 0) from payment p inner join invoice i on p.invoice = i.invoiceid where i.client = c.clientid and i.isdeleted = 0) 
END as remaining,
case c.isactive+0
        when '1' then 'Stop'
        else 'Start' 
        end as Active
FROM client c 
ORDER BY clientname
于 2012-09-06T18:01:20.957 に答える