好的,所以在下面的语句中,我试图将第一个pi.planinfoid
选择作为第一个字段,并使其成为一个动态变量,以代替1736
您在用作附加字段的两个选择语句中看到的。
即使值为 0 或 null,我还需要它仍然返回由两个 select 语句生成的两个字段。
如果有人能解决这个问题,我会提前感谢。
SELECT pi.planinfoid,
pi.description,
count(DISTINCT p.planid) AS total,
sum(dm.debitamount) AS Num,
pi.minperiod,
(
SELECT count(p.planid)
FROM plans p,
planinfo pi
WHERE pi.planinfoid = p.planinfoid
AND pi.planinfoid = '1736'
AND p.closed = 0
) AS opened,
(
SELECT count(p.planid)
FROM plans p,
planinfo pi
WHERE pi.planinfoid = p.planinfoid
AND pi.planinfoid = '1736'
AND p.closed = 1
) AS closedd
FROM planinfo pi, plans p, debitmovements dm
WHERE pi.price > 0
AND p.planinfoid = pi.planinfoid
AND dm.planid = p.planid
AND p.servicestart BETWEEN '2012-01-01' AND '2013-01-01'
GROUP BY pi.description,
pi.minperiod,
pi.planinfoid
ORDER BY total DESC
那跑了,但无论如何似乎打开和关闭都与总数无关,
planid plan descrip min TOTAL PRICE OPEN CLOSE
1736 Additional IP 1 146 1926 101 545
从技术上讲,如果在该时间段内售出的总数为 146,则您不能有 101 个仍然打开和 545 个关闭,也许它的非拉数仍然打开和关闭仅在那个时间段打开的那些。146 open 的 uniqe 字段将是 p.planid,或者每个人基本上都有一个唯一的 p.planid,但到目前为止做得很好。