[英]How do I group by min value in one field of table, keeping all the values from that same row?
[英]How can I make all values of one identifier the same based a on value in a row?
SELECT a.IDENTIFIER,
a.NAME,
a.CATEGORY,
b.IDENTIFIER_TYPE,
b.NAME,
CASE
WHEN b.IDENTIFIER_TYPE = 111 THEN 'PRESENT'
ELSE 'NOT PRESENT'
END AS HAS111
FROM TABLE_A a
LEFT JOIN IDENTIFIER_TYPE_TABLE b ON a.IDENTIFIER = b.IDENTIFIER
WHERE a.IDENTIFIER IN (1, 2, 3, 4)
;
這是我正在使用的代碼,我得到的數據是:
但我希望數據看起來像這樣:
基本上,我需要這個:
td { text-align: center; }
<table> <tbody> <tr> <td>IDENTIFIER</td> <td>NAME</td> <td>CATEGORY</td> <td>IDENTIFIER_TYPE</td> <td>HAS111</td> </tr> <tr> <td>123</td> <td>item123</td> <td>1</td> <td>778</td> <td>not present</td> </tr> <tr> <td>123</td> <td>item123</td> <td>1</td> <td>127</td> <td>not present</td> </tr> <tr> <td>123</td> <td>item123</td> <td>1</td> <td>137</td> <td>not present</td> </tr> <tr> <td>456</td> <td>item456</td> <td>1</td> <td>122</td> <td>not present</td> </tr> <tr> <td>456</td> <td>item456</td> <td>2</td> <td>87</td> <td>not present</td> </tr> <tr> <td>456</td> <td>item456</td> <td>2</td> <td>444</td> <td>not present</td> </tr> <tr> <td>789</td> <td>item789</td> <td>2</td> <td>289</td> <td>present</td> </tr> <tr> <td>789</td> <td>item789</td> <td>2</td> <td>111</td> <td>present</td> </tr> <tr> <td>789</td> <td>item789</td> <td>2</td> <td>75</td> <td>present</td> </tr> </tbody> </table>
您看到 item789 在其中一行中有 111,因此我需要所有其他行為 item789 說“存在”。 其他人沒有111,所以他們現在沒有111。 這有意義嗎?
您可以使用EXISTS
:
SELECT a.IDENTIFIER, a.NAME, a.CATEGORY, b.IDENTIFIER_TYPE, b.NAME,
(CASE WHEN EXISTS (SELECT 1
FROM IDENTIFIER_TYPE_TABLE b1
WHERE a.IDENTIFIER = b1.IDENTIFIER AND
b1.IDENTIFIER_TYPE = 111
)
THEN 'PRESENT' ELSE 'NOT PRESENT'
END) AS HAS111
FROM TABLE_A a LEFT JOIN
IDENTIFIER_TYPE_TABLE b
ON a.IDENTIFIER = b.IDENTIFIER
WHERE a.IDENTIFIER IN (1, 2, 3, 4);
使用 window 函數:
SELECT a.IDENTIFIER, a.NAME, a.CATEGORY,
b.IDENTIFIER_TYPE, b.NAME,
(CASE WHEN b.num_111 > 0 THEN 'PRESENT'
ELSE 'NOT PRESENT'
END) AS HAS111
FROM TABLE_A a LEFT JOIN
(SELECT b.*,
SUM(CASE WHEN b.IDENTIFIER_TYPE = 111 THEN 1 ELSE 0 END) OVER (PARTITION BY b.IDENTIFIER) as num_111
FROM IDENTIFIER_TYPE_TABLE b
) b
ON a.IDENTIFIER = b.IDENTIFIER
WHERE a.IDENTIFIER IN (1, 2, 3, 4);
或者不使用子查詢:
SELECT a.IDENTIFIER, a.NAME, a.CATEGORY,
b.IDENTIFIER_TYPE, b.NAME,
(CASE WHEN SUM(CASE WHEN b.IDENTIFIER_TYPE = 111 THEN 1 ELSE 0 END) > 0 THEN 'PRESENT'
ELSE 'NOT PRESENT'
END) AS HAS111
FROM TABLE_A a LEFT JOIN
IDENTIFIER_TYPE_TABLE b
ON a.IDENTIFIER = b.IDENTIFIER
WHERE a.IDENTIFIER IN (1, 2, 3, 4);
你會想要再次離開加入你的桌子只是為了禮物:
SELECT a.IDENTIFIER,
a.NAME,
a.CATEGORY,
b.IDENTIFIER_TYPE,
b.NAME,
iif( b.identifier is null,'Not Present','Present') as HAS111
FROM TABLE_A a
left join (Select distinct identifier table_A where type = 111) b on a.identifier=b.identifier
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.