这可能很难在标题中描述,这是一个示例数据:
id pub_type general_suppl book_suppl catalogue_suppl magazine_suppl
1 book 10 10 0 0
2 book 11 11 0 0
3 catalogue 10 0 10 0
4 magazine 9 0 0 9
5 other 10 0 0 0
6 magazine 8 0 0 10
Run Code Online (Sandbox Code Playgroud)
每个项目都是特定的出版物类型,包括一般供应商和出版物类型的供应商. other物品只有一个general_suppl.如果我想获得供应商价值的所有项目10,则必须满足以下条件:
if pub_type == 'book'
match on book_suppl == 10
elif pub_type == 'catalogue'
match on catalogue_suppl == 10
elif pub_type == 'magazine'
match on magazine_suppl == 10
else
match on general_suppl == 10
Run Code Online (Sandbox Code Playgroud)
如您所见,如果pub_type落入book,catalogue,magazine,我会忽略该列general_suppl.
供应商价值的预期产出10将是:
id pub_type general_suppl book_suppl catalogue_suppl magazine_suppl
1 book 10 10 0 0
3 catalogue 10 0 10 0
5 other 10 0 0 0
6 magazine 8 0 0 10
Run Code Online (Sandbox Code Playgroud)
我可以通过检索所有行并在代码级别执行过滤来实现上述目的.是否有一种SQL方法可以获得上述结果?数据库设计和数据是我无法控制的,所以我无法重新设计数据库,必须使用上面的表结构.
这很难看,但你可以把这个逻辑扔进一个CASE结构中.
SELECT *
FROM table
WHERE 10 = CASE WHEN pub_type = 'book' THEN book_suppl
WHEN pub_type = 'catalogue' THEN catalogue_suppl
WHEN pub_type = 'magazine' THEN magazine_suppl
ELSE general_suppl END
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |