这可能是很难的标题来形容,这里有一个样本数据:在SQL中,如何匹配特定行上的特定列?
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
每个项目的是一个特定出版物类型与一般的供应商和出版的一类供应商。 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
正如你可以在上面看到,如果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
我可以通过检索所有的行实现上述和在代码级别执行滤波。是否有单一的SQL方法来获得上述结果?数据库设计和数据超出了我的控制范围,所以我不能重新设计数据库,而必须使用上述表结构。
为什么要为Booksupplier,MagazineSupplier等设置单独的栏目?如果每个发布类型只能拥有该特定发布类型的供应商,那么这看起来很复杂并且没有什么价值。在您的示例数据中,没有行有两列填充了不同的供应商ID。那么为什么不只是有一个“供应商”栏? – 2011-06-09 20:16:44
@Charles Bretana他已经表示设计超出了他的控制范围。希望在他接受dpmattingly的回答后,他可以将设计师从一座桥梁中解放出来。 :-) – MarkD 2011-06-09 20:20:48
这是我最初的观察,我同意这是错误的数据库设计,但我必须使用这种表和数据。 – 2011-06-09 20:21:46