SELECT
t.PK_DocumentInstanceChapterExpanded
, t.StatusColumn
FROM
(
SELECT
PK_DocumentInstanceChapterExpanded
,STATUSFLAG
FROM SECTION_TABLE1 --- Status of my section
WHERE PK_DocumentInstanceChapterExpanded = 50734
UNION
SELECT
s.PK_DocumentInstanceChapterExpanded
i.STATUSFLAG --Status of my Item
FROM SECTION_TABLE s
INNER JOIN ITEM_TABLE i ON i.FK_SECTIONKEY = s.PK_SECTIONKEY
WHERE s.PK_DocumentInstanceChapterExpanded = 50734
) t
我的结果
正如您所见,UNION将带来2条记录 1)部分 2)项目
当发生这种情况时,我只想要一个结果
我的期待
我无法避免使用UNION,因为它需要从同一个键的2个不同表中获取状态。
我在想的是我可以把它写成子查询并在顶部做一些选择,但我不想硬编码逻辑。
类似于STATUS COLUMN具有&PARATAL' PARTIAL'和'锁定'它应该只获取' PARTIAL' ELSE' LOCK'。
我甚至尝试了CASE但是它一次只能查看一列是否有办法查看结果集,看看这个列是否有多个值,只选择一个' PARTIAL'。
谢谢
答案 0 :(得分:2)
您只需使用GROUP BY
和MAX
:
SELECT t.PK_DocumentInstanceChapterExpanded
, MAX(t.StatusColumn)
FROM (
SELECT PK_DocumentInstanceChapterExpanded
, STATUSFLAG
FROM SECTION_TABLE1
WHERE PK_DocumentInstanceChapterExpanded = 50734
UNION
SELECT s.PK_DocumentInstanceChapterExpanded
i.STATUSFLAG
FROM SECTION_TABLE s
INNER JOIN ITEM_TABLE i
ON i.FK_SECTIONKEY = s.PK_SECTIONKEY
WHERE s.PK_DocumentInstanceChapterExpanded = 50734
) t
GROUP BY t.PK_DocumentInstanceChapterExpanded
这样可行,因为PARTIAL
按字母顺序大于LOCKED
。
答案 1 :(得分:0)
现在我不知道每个id每个表可以有多少行。但是,如果只有1,为什么你不写:
SELECT s.PK_DocumentInstanceChapterExpanded
,case when i.STATUSFLAG is not null then i.STATUSFLAG else s.STATUSFLAG end
FROM SECTION_TABLE s
LEFT JOIN ITEM_TABLE i ON i.FK_SECTIONKEY = s.PK_SECTIONKEY
WHERE s.PK_DocumentInstanceChapterExpanded=50734