저는 정부와 상업 칼럼으로 구분 된 다양한 클라이언트를 저장하는 테이블을 가지고 있습니다. 문제는 두 열에 균등하지 않은 수의 클라이언트가있을 수 있다는 것입니다. 내가 SELECT를 할 때 결과 집합을 정렬하는 깔끔한 방법을 생각할 수 없기 때문에 불규칙한 위치에 NULL 값이 생깁니다. 예를 들어, 다음은 직선 SELECT (없음 ORDER) 가능합니다 : 당신이 볼 수 있듯이 정부보다 더 많은 기업 고객이 있기 때문에테이블 변수 : 더 깨끗한 방법이 있습니까?
Government | Commercial DOD | IBM DOS | Microsoft | Novell DVA | Oracle
는 정부 열에 NULL 값이 있습니다. 이것은 언제든지 변경 될 수 있으며 더 많은 열이 더 많은 값을 가질 것이라는 보장은 없습니다. 결과 집합의 중간에 공백 값을 사용하여 렌더링을 제거하기 위해 테이블 변수 (정부 고객 용과 상업용)에 대해 두 개의 SELECT를 수행하기로 결정한 다음 마지막으로 SELECT를 선택하여 다시 결합합니다 (
).DECLARE @Government TABLE
(
Row int,
PortfolioHistoryId uniqueidentifier,
Government varchar(40),
GovernmentPortfolioContentId uniqueidentifier
)
DECLARE @Commercial TABLE
(
Row int,
PortfolioHistoryId uniqueidentifier,
Commercial varchar(40),
CommercialPortfolioContentId uniqueidentifier
)
INSERT INTO @Government
SELECT
(ROW_NUMBER() OVER (ORDER BY Government)) AS Row,
PortfolioHistoryId,
Government,
GovernmentPortfolioContentId
FROM dbo.PortfolioHistory
WHERE Government IS NOT NULL
INSERT INTO @Commercial
SELECT
(ROW_NUMBER() OVER (ORDER BY Commercial)) AS Row,
PortfolioHistoryId,
Commercial,
CommercialPortfolioContentId
FROM dbo.PortfolioHistory
WHERE Commercial IS NOT NULL
SELECT
g.Government,
c.Commercial,
g.GovernmentPortfolioContentId,
c.CommercialPortfolioContentId
FROM @Government AS g
FULL OUTER JOIN @Commercial AS c ON c.Row = g.Row
나는이 쿼리에 불만이있는 것은 아니지만 (어쩌면 내가해야 할 것 같은), 이것을 구현하는 더 깨끗한 방법이 있습니까?
응답 해 주셔서 감사합니다. 나는 논쟁 적이 지 않다. (나는 정말로 이해하지 못한다.)하지만 그게 나에게 무엇을 사주 는가? 나는 그것들을 단순히 순서대로 표시하는 것만으로 충분하다고 생각했다. (따라서 행 번호에 합류). 그건 그렇고, 너는 FULL OUTER JOIN을 의미한다고 생각해.;-) – senfo