다음에서 첫 번째 행은 표제이며 모든 값은 | 구분됩니다. 다음과 같이열 이름을 기준으로 다른 테이블의 기본값 가져 오기
나는 MemberInfo가라는 테이블이 있습니다
ColumnName|Value
AccountCode|FredsDiscounts
Id|1
Name|Joe Bloggs
Address|1 Puddle lane, PL99 9PL
SignatureRequired|0
PetRegistered|NULL
BrochureType|Post
MembershipType|NULL
참고 : MemberInfo가은 단지 두 개의 열을 가지고; 열 이름 및 값 다음과 같이
나는 DefaultValues 라는 다른 테이블이 :
AccountCode|Name|Address|SignatureRequired|PetRegistered|BrochureType|MembershipType
FredsDiscounts|Unknown|Unknown|1|0|Email|Normal
JillsSupers|Unknown|Unknown|1|0|Post|Super
GreggsFurniture|Unknown|Unknown|1|0|Email|None
JeremySwift|Unknown|Unknown|1|0|Telephone|Normal
참고 :은 7 개 열을 가지고 DefaultValues; AccountCode, 이름, 주소, 이 SignatureRequired, PetRegistered, BrochureType 및 MembershipType. 값에 대한
이 경우 PetRegistered 및 MembershipType 있습니다 NULL입니다 MemberInfo가, 에서 나는 DefaultValues 의 해당 열에서 값이 자신의 자리를 먹고 싶어.AccountCode을 기반으로 사용할 행을 선택해야합니다. 내가 사전에 그 이름을 모르는 상태에서 열을 참조하는 방법을 모른다
AccountCode|FredsDiscounts
ColumnName|Value
Id|1
Name|Joe Bloggs
Address|1 Puddle lane, PL99 9PL
SignatureRequired|0
PetRegistered|0
BrochureType|Post
MembershipType|Normal
다음과 같이
원하는 결과가 될 것입니다. 다음과 같이
내가 현재 사용하는 방법은 다음과 같습니다
DECLARE
@AccountCode VARCHAR(MAX) = 'FredsDiscounts'
SELECT
MemberInfo.ColumnName,
CASE WHEN MemberInfo.Value IS NOT NULL THEN MemberInfo.Value ELSE Defaults.[DefaultValue] END AS Value
FROM
MemberInfo
LEFT OUTER JOIN (
(SELECT 'AccountCode' AS [ColumnName], @AccountCode AS [DefaultValue]) UNION
(SELECT TOP 1 'Name' AS [ColumnName], DefaultValues.[Name] AS [DefaultValue] FROM DefaultValues WHERE DefaultValues.Accountcode = @AccountCode) UNION
(SELECT TOP 1 'Address' AS [ColumnName], DefaultValues.[Address] AS [DefaultValue] FROM DefaultValues WHERE DefaultValues.Accountcode = @AccountCode) UNION
(SELECT TOP 1 'SignatureRequired' AS [ColumnName], DefaultValues.[SignatureRequired] AS [DefaultValue] FROM DefaultValues WHERE DefaultValues.Accountcode = @AccountCode) UNION
(SELECT TOP 1 'PetRegistered' AS [ColumnName], DefaultValues.[PetRegistered] AS [DefaultValue] FROM DefaultValues WHERE DefaultValues.Accountcode = @AccountCode) UNION
(SELECT TOP 1 'BrochureType' AS [ColumnName], DefaultValues.[BrochureType] AS [DefaultValue] FROM DefaultValues WHERE DefaultValues.Accountcode = @AccountCode) UNION
(SELECT TOP 1 'MembershipType' AS [ColumnName], DefaultValues.[MembershipType] AS [DefaultValue] FROM DefaultValues WHERE DefaultValues.Accountcode = @AccountCode)
) AS Defaults ON [Defaults].[ColumnName] = MemberInfo.[ColumnName]
... 아주 우아하지.
이 작업을 수행하는 적절한 방법은 무엇입니까?
두 테이블 모두에 대해 왼쪽 조인을 사용하고 ISNULL 또는 COALESCE를 사용합니다. –