Sql 派生列结果
我是一个sql新手,必须制定一个sql查询,列出质量表中的所有5列,并再添加两列:批次中生产的项目的ProductCode,以及衍生列BatchQuality,如果批次质量差(包含1个以上缺陷项目),则包含“差”,否则包含“好” 我从oracle数据库中放入的3个表中提取:生产表(包含serialno、batchno和productcode)、质量表(batchno、test1、test2、Test3、test4)和缺陷表(defectiveid、serialno) 通过使用以下内容,我可以从7列中获得6列:Sql 派生列结果,sql,oracle,Sql,Oracle,我是一个sql新手,必须制定一个sql查询,列出质量表中的所有5列,并再添加两列:批次中生产的项目的ProductCode,以及衍生列BatchQuality,如果批次质量差(包含1个以上缺陷项目),则包含“差”,否则包含“好” 我从oracle数据库中放入的3个表中提取:生产表(包含serialno、batchno和productcode)、质量表(batchno、test1、test2、Test3、test4)和缺陷表(defectiveid、serialno) 通过使用以下内容,我可以从7
select q.batchno, q.test1, q.test2, q.test3, q.test4, p.productcode_id
from production p, defective d, quality q
where d.serialno = p.serialno
and p.batchno = q.batchno;
关于如何获得最后一个名为batchquality的专栏,说明它是好是坏,有什么想法吗?我想我需要一个count函数,但一旦我有了它,我怎么才能得到一个新的列,它将说明poor或good?
感谢您提供的帮助。您当前的查询是一个内部联接,在
where
子句中使用了一个旧的、过时的隐式联接。我假设defective
表仅包含一行产品(如果存在缺陷)。您的内部联接将始终仅返回有缺陷的零件,而不会返回无缺陷的零件。为此,您需要一个外部联接。抛弃过时的隐式联接并使用显式JOIN
运算符的另一个原因:
select q.batchno, q.test1, q.test2, q.test3, q.test4, p.productcode_id
from production p
JOIN quality q ON p.batchno = q.batchno;
LEFT JOIN defective d ON d.serialno = p.serialno
对于没有缺陷的产品,缺陷
表中列的值将为空。因此,要获取产品的“好”或“坏”标志,需要检查该值是否为空:
select q.batchno, q.test1, q.test2, q.test3, q.test4, p.productcode_id,
case
when d.serialno is null then 'good'
else 'bad'
as batch_quality
from production p
JOIN quality q ON p.batchno = q.batchno;
LEFT JOIN defective d ON d.serialno = p.serialno
但是,由于联接的性质,上述语句将针对
质量
和缺陷
表中的每一行重复生产表中的每一行。我不清楚你到底要不要 欢迎来到SO。显示表模式和一些示例数据会更有帮助。