아래 쿼리문 돌리면 돌리때는 아무런 에러가 없는데, 막상 뷰를 확인해볼려면 아래와 같은 메시지가 뜹니다.
메시지 512, 수준 16, 상태 1, 줄 2
하위 쿼리에서 값을 둘 이상 반환했습니다. 하위 쿼리 앞에 =, !=, <, <=, >, >= 등이 오거나 하위 쿼리가 하나의 식으로 사용된 경우에는 여러 값을 반환할 수 없습니다.
- 쿼리값이 여러개라서 걸리는 에러인데, ANY나 ALL을 써서 어떻게 처리해야 할지 모르겠습니다. 도와주세요.
--------------------------------------------------------------------------------------------------------------------------------------------------------------
USE [LOT_BI_QCB] ;
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*
QCINSPECTIONSTATUS = 0(수입검사), QCINSPECTIONSTATUS = 4(외주검사) 일 경우 -> 검사구분2 = 입고검사
QCINSPECTIONSTATUS = 3 (3D가공품검사) 일 경우 -> 검수구분2 = 사내가공품 검사
*/
CREATE VIEW dbo.ExamStatus
AS
SELECT QC.QCINSPECTIONSTATUS AS '검사상태', QC.QCINSPECTIONTYPE AS '검사구분',
CASE WHEN QC.QCINSPECTIONTYPE IN(0,4) THEN '입고검사'
WHEN QC.QCINSPECTIONTYPE = 3 THEN '사내가공품 검사'
ELSE NULL END AS '검사구분2',
QC.QCINSPECORDERNO AS '검사의뢰번호',
CASE WHEN QC.QCINSPECTIONTYPE IN(0, 4) THEN QC.VENDACCOUNT
ELSE NULL END AS '업체코드',
CASE WHEN QC.QCINSPECTIONTYPE IN(0, 4) THEN (SELECT VT.NAME FROM LOTAx2009_Demo..VENDTABLE VT WHERE VT.ACCOUNTNUM = QC.VENDACCOUNT)
ELSE NULL END AS '업체',
CASE WHEN QCINSPECTIONTYPE = 3 THEN (SELECT IVT.ITEMMCLASSID FROM LOTAx2009_Demo..INVENTTABLE IVT WHERE IVT.ITEMID = QC.ITEMID)
ELSE NULL END AS '모델',
(SELECT QILIST.QCSAMPLEQTY FROM LOTAx2009_Demo..QCINSPECITEMLIST QILIST WHERE QILIST.QCINSPECORDERNO = QC.QCINSPECORDERNO) AS '측정수량',
(SELECT SUM(QCTRANS.QTY) FROM LOTAx2009_Demo..QCINSPECTRANS QCTRANS WHERE QCTRANS.QCINSPECORDERNO = QC.QCINSPECORDERNO AND QCTRANS.QCINSPECTIONPASSREJECT = 0) AS '불량수량'
FROM LOTAx2009_Demo..QCINSPECTBL QC
WHERE QC.QCINSPECTIONSTATUS IN(3, 4) AND QC.QCINSPECTIONTYPE IN(0, 4, 3)
GO
Comment 2
-
이리
2016.02.26 12:07
-
초짜프로그래머
2016.02.26 12:19
뭔가 문제 인지 알았습니다. 일단은...
CASE WHEN QC.QCINSPECTIONTYPE IN(0, 4) THEN (SELECT VT.NAME FROM LOTAx2009_Demo..VENDTABLE VT WHERE VT.ACCOUNTNUM = QC.VENDACCOUNT)
WHERE 절에 서브쿼리를 날렸는데, 문제는 VENDTABLE (구매처 테이블)에 똑같은 계정과 이름으로 값이 여러개 있더라구요 ㄷㄷ
* 구매처 계정/ 업체명 / 컴페니언
1. A0001 / 한신전자 / AA 중공업
1. A0001 / 한신전자 / BB 중공업
1. A0001 / 한신전자 / CC 중공업
서브 쿼리 WHERE 절에 컴페니언으로 조건 추가해야 될거 같네요. ㄷㄷ
값이 하나가 나오는게 아니라면 조인으로 변경해보세요.