我的要求是从 SQL表中获取缺少状态的ID。我将获得每个ID的状态列表,例如 A,B,C,D 。在一种情况下,我必须检查状态 B 是否存在。表格每天都会更新,每次创建新ID时都会
条件
Table1:
Id StatusCode
1 A
1 C
2 A
2 B
2 C
3 A
3 C
3 D
如何使用SQL查询获取ID 1和3 ?,似乎很简单,但由于我是SQL新手,所以无法在SQL中获取它。
当只有一个ID时,此屏幕快照中的select语句可以正常工作,而在多个ID上失败。我尝试了许多其他方式,但没有用
答案 0 :(得分:2)
尝试一下
SELECT DISTINCT ID
FROM T1
WHERE Statuscode = 'A' AND ID NOT IN (SELECT ID FROM T1 WHERE Statuscode = 'B' )
AND (ID IN (SELECT ID FROM T1 WHERE Statuscode = 'C' ) OR ID IN (SELECT ID FROM T1 WHERE Statuscode = 'D' ))
此外,要更正Gordon Linoff's答案,我们需要在其中的条件处再添加一个
SELECT Id
FROM T1
GROUP BY Id
HAVING SUM(CASE WHEN Statuscode = 'A' THEN 1 ELSE 0 END) > 0 AND
SUM(CASE WHEN Statuscode = 'B' THEN 1 ELSE 0 END) = 0 AND
SUM(CASE WHEN Statuscode IN ('C', 'D') THEN 1 ELSE 0 END) > 0;
答案 1 :(得分:1)
这回答了问题的原始版本。
我认为您可以使用聚合:
select id
from t
group by id
having sum(case when status = 'A' then 1 else 0 end) > 0 and
sum(case when status in ('C', 'D') then 1 else 0 end) > 0;
答案 2 :(得分:0)
import requests
from bs4 import BeautifulSoup
result = []
page = 0
while True:
page += 1
print(f"Extracting Page# {page}")
with requests.Session() as req:
r = req.get(
f"https://www.kununu.com/de/volkswagen/bewerbung/{page}")
soup = BeautifulSoup(r.text, 'html.parser')
if r.status_code == 200:
for item in soup.findAll("div", {'class': 'review-details user-content hidden-xs'}):
data = [div.get_text(strip=True)
for div in item.findAll("div")]
if '2010' in data:
exit()
else:
if data not in result:
result.append(data)
for what in result:
print(what)
答案 3 :(得分:0)
SELECT id
FROM t
GROUP BY
Id
HAVING MAX(status) = CHAR(64 + COUNT(*))
--char(64+1) = A, char(64+2) = B etc
其背后的逻辑是,它将全部计数相同类型的id。因此,如果您有3行,则需要abc。如果您的ID有4行,那么您将拥有ABCD。通常,最大状态应始终与行数相同。
如果您在ID和状态代码之间没有重复,这当然是正确的。