我之前发布了一些内容,但没有正确解释我要完成的工作。我正在第二次尝试。
我想从两个不同的表返回字段值,但只希望对该表进行计数。在这种情况下,@ SOP表。现在,它给了我@SOPREV表的总数。
SELECT A.SOPSEQ, A.SOPNBR, B.REVUSR2 , COUNT(A.SOPSEQ) OVER() AS AAA
FROM @SOP A
INNER JOIN @SOPREV B on B.SOPSEQ = A.SOPSEQ
WHERE UPPER(A.SOPSTS) = 'IN REVIEW' AND UPPER(B.REVSTS) = 'IN REVIEW'
GROUP BY A.SOPSEQ, A.SOPNBR, B.REVUSR2
ORDER BY A.SOPNBR, A.SOPREV
OFFSET (:StartingRow - 1) * :NbrOfRows ROWS
FETCH NEXT :NbrOfRows + 1 ROWS ONLY;
表@SOP:
|SOPSEQ |SOPNBR |SOPSTS |
|111 |123 |Review |
|222 |456 |Review |
|333 |789 |Review |
表@SOPREV:
|SOPSEQ |REVUSR2 |
|111 |Mark |
|111 |John |
|333 |Erik |
尝试用LEFT JOIN代替INNER JOIN
SELECT A.SOPSEQ, A.SOPNBR, B.REVUSR2 , COUNT(A.SOPSEQ) OVER() AS AAA
FROM @SOP A
LEFT JOIN @SOPREV B on A.SOPSEQ = B.SOPSEQ
WHERE UPPER(A.SOPSTS) = 'IN REVIEW' AND UPPER(B.REVSTS) = 'IN REVIEW'
GROUP BY A.SOPSEQ, A.SOPNBR, B.REVUSR2
ORDER BY A.SOPNBR, A.SOPREV
这将从表@SOP返回计数。
我不确定您到底想要什么,但是如果您只想从第一个表中获得计数,则可以使用COUNT(DISTINCT column)
来获得它,如下所示:
select
a.sopseq,
a.sopnbr,
b.revusr2,
count(distinct a.sopseq) as aaa
from sop a
inner join soprev b on b.sopseq = a.sopseq
where upper(a.sopsts) = 'IN REVIEW' and upper(b.revsts) = 'IN REVIEW'
group by a.sopseq, a.sopnbr, b.revusr2
order by a.sopnbr, a.sopseq
结果:
SOPSEQ SOPNBR REVUSR2 AAA
------ ------ ------- ---
111 123 Mark 1
111 123 john 1
333 789 Erik 1
供参考,我使用的数据脚本是:
create table sop (
sopseq int,
sopnbr int,
sopsts varchar(10)
);
insert into sop (sopseq, sopnbr, sopsts) values
(111, 123, 'In Review'),
(222, 456, 'In Review'),
(333, 789, 'In Review');
create table soprev (
sopseq int,
revusr2 varchar(10),
revsts varchar(10)
);
insert into soprev (sopseq, revusr2, revsts) values
(111, 'Mark', 'In Review'),
(111, 'john', 'In Review'),
(333, 'Erik', 'In Review');