我想知道是否可以在表中创建另一个列,该列包含我希望在此新列中填充的数据?新列是Flag2。这是表格:
我想要做的是,在item id为30的情况下,我希望ITEM ID只显示30次,并填充Flag2中的QC Unsupportted?我该怎么做呢?
我只能考虑进行内连接,但这不起作用。
这是我在尝试这样做时所做的:
SELECT
A.ITEMID, A.FLAG1, A.FLAG2
FROM
#FLAGS as A
INNER JOIN
#FLAGS as B ON A.ITEMID = B.ITEMID
GROUP BY
a.ITEMID, a.FLAG1, A.FLAG2
ORDER BY
ITEMID
答案 0 :(得分:1)
假设我理解你的目标,如果任何ITEMID 的当前FLAG1值是不同的,并且你最多只有两个相同ID的实例,我认为这应该做你想要的:
SELECT
lft.ITEMID
, lft.FLAG1
, rght.FLAG1 FLAG2
FROM (
SELECT
t.ITEMID
, t.FLAG1
FROM (
SELECT
l.ITEMID
, l.FLAG1
, COUNT(l.ITEMID) i
FROM #FLAGS l
INNER JOIN #FLAGS r ON l.ITEMID = r.ITEMID
WHERE r.FLAG1 <= l.FLAG1
GROUP BY
l.ITEMID
, l.FLAG1) t
WHERE t.i=1) lft
LEFT OUTER JOIN (
SELECT
t.ITEMID
, t.FLAG1
FROM (
SELECT
l.ITEMID
, l.FLAG1
, COUNT(l.ITEMID) i
FROM #FLAGS l
INNER JOIN #FLAGS r ON l.ITEMID = r.ITEMID
WHERE r.FLAG1 <= l.FLAG1
GROUP BY
l.ITEMID
, l.FLAG1) t
WHERE t.i=2) rght ON lft.ITEMID = rght.ITEMID
-- Or better
SELECT
lft.ITEMID
, lft.FLAG1
, rght.FLAG1 FLAG2
FROM (
SELECT
t.ITEMID
, t.FLAG1
FROM (
SELECT
l.ITEMID
, l.FLAG1
, ROW_NUMBER() OVER(PARTITION BY ITEMID ORDER BY FLAG1) as i
FROM test l) t
WHERE t.i=1) lft
LEFT OUTER JOIN (
SELECT
t.ITEMID
, t.FLAG1
FROM (
SELECT
l.ITEMID
, l.FLAG1
, ROW_NUMBER() OVER(PARTITION BY ITEMID ORDER BY FLAG1) as i
FROM test l) t
WHERE t.i=2) rght ON lft.ITEMID = rght.ITEMID
如果您有相同ID的其他标志值,则可以将新的外部联接添加到新的内联表(rght2,rght3等),其中i = 3,4等,并且您正在选择rght2 AS FLAG3 ,rght3 AS FLAG4等
另请注意,FLAG1的当前值将按字母顺序通过FLAG1和FLAG2分配。如果您想以相反的顺序分发它们,可以替换&lt; = with&gt; =。如果您希望按特定顺序分发两个以上的标志,则必须创建一个具有排名值的单独表格,并加入到可行但可能更加丑陋的表格中。