다음과 같은 SQL 문이 있습니다. union 키워드를 사용하지 않고이 sql 문의 결과에 단일 행 (code = 0, desc = 1)을 추가하려면 어떻게합니까? 감사.공용어를 사용하지 않고 SQL 문을 작성하는 방법은 무엇입니까?
select code, desc
from material
where material.ExpireDate ='2010/07/23'
다음과 같은 SQL 문이 있습니다. union 키워드를 사용하지 않고이 sql 문의 결과에 단일 행 (code = 0, desc = 1)을 추가하려면 어떻게합니까? 감사.공용어를 사용하지 않고 SQL 문을 작성하는 방법은 무엇입니까?
select code, desc
from material
where material.ExpireDate ='2010/07/23'
당신은 항상 당신이 노동 조합 또는 뷰 중 하나를 사용하지 않기 때문에 그 자체가 UNION 키워드
CREATE VIEW material_view AS SELECT code, desc, ExpireDate FROM material UNION SELECT '0', '1', NULL;
SELECT code, desc FROM material_view WHERE ExpireDate = '2010/07/23' OR code = '0';
를 사용하여 테이블에 대한 뷰를 만들 수 있습니다, 나는 더미를 추가하는 게 좋을 것 (. 코드 = 0, DESC = 1, 및 일반적으로 선택하지 않을 것 EXPIREDATE에 뭔가 - - 예를 들어, 01 1900 년 1 월) 재료 테이블 행은 다음과 같은 쿼리를 사용 :
select code, desc
from material
where material.ExpireDate ='2010/07/23' or
material.ExpireDate ='1900/01/01'
일반적으로, 연합은 y 기본 옵션. `UNION`를 사용하지 않는 이유는
WITH material AS
(
SELECT *
FROM
(VALUES (2, 'x', '2010/07/23'),
(3, 'y', '2009/01/01'),
(4, 'z', '2010/07/23')) vals (code, [desc], ExpireDate)
)
SELECT
COALESCE(m.code,x.code) AS code,
COALESCE(m.[desc],x.[desc]) AS [desc]
FROM material m
FULL OUTER JOIN (SELECT 0 AS code, '1' AS [desc]) x ON 1=0
WHERE m.code IS NULL OR m.ExpireDate ='2010/07/23'
는
code desc
----------- ----
2 x
4 z
0 1
'UNION ALL '을 행 생성자로 대체 할 수 있습니다. '.. (VALUES (2, 'x', '2010/07/23'), (3, 'y', '2010/07/23'), (4, 'z', '2010/07/23 ')) AS 자료 (코드, [desc], ExpireDate) ...' – onedaywhen
@onedaywhen - 네가 해냈습니다. 좋은 제안 감사! –
를 제공? 회견? – pascal
UNION은 때때로 DB 공급자에 의해 잘못 처리됩니다. 한 가지 예가 Delphi의 TClientDataSet + TDataSetProvider입니다. – too
결과 집합을 반환하는 저장 프로 시저는 어떻습니까? 또는 호출자 코드에이 의사 행을 추가 하시겠습니까? BTW 당신은 이미 SQL 키워드처럼'DESC'를 컬럼 이름으로 사용하는 데 문제가 없습니까? – pascal