2016-11-04 74 views
-6

給定SQL Server 2008的實例,想象一下名爲@Configuration的表,它有三列:ID,CodeSubCodeCodeSubCode不應該有重複的行。如果存在配置,請選擇第一行,否則請選擇NULL行

現在想象另一個詳細程度表@ConfigurationDetails,它們有Code的重複行,子代碼可能是SubCode作爲Null可用。

如果SubCode可再挑AmtData從細節表直接,如果SubCode是不是在細節上表可以再挑AmtDataNULL記錄

(注:SubCode=NULL條目始終適用於所有配置行)

任何想法從哪裏開始?

例如 一個簡單的例子... 表

declare @Configuration TABLE ( 
     ID INTEGER IDENTITY PRIMARY KEY, 
     Code VARCHAR(50), 
     SubCode VARCHAR(50) 


); 

declare @ConfigurationDetails TABLE 
( 
    Code VARCHAR(50), 
    SubCode VARCHAR(50), 
    Amt MONEY, 
    Data VARCHAR(123) 
); 


INSERT INTO @Configuration VALUES 
('BR1','Sub1'), 
('BR1','Sub2'), 
('BR1','Sub3'), 
('BR1','Sub4'), 
('BR2','Sub1'), 
('BR2','Sub2') 

INSERT INTO @ConfigurationDetails VALUES 
('BR1','Sub1',500,'BR1 Sub1 Data'), 
('BR1','Sub2',600,'BR1 Sub2 Data'), 
('BR1',NULL,700,'BR1 Data'), 
('BR2','Sub1',500,'BR2 Sub1 Data'), 
('BR2',NULL,700,'BR2 Data') 


INPUT: 
@SubCode = 'Sub1', @Code = 'BR1' 

OUTPUT: 
Code SubCode Amt Data 
==== ======= === ==== 
BR1  Sub1 500 BR1 Sub1 Data 

INPUT: 
@SubCode = 'Sub4', @Code = 'BR1' 

OUTPUT: 
Code SubCode Amt Data 
==== ======= === ==== 
BR1  NULL 700 BR1 Data 
+0

首先你的例子有錯誤,不能插入值,標識列(除非使用Insert_identity ),所以處理你的例子,然後再次訪問。 –

+0

這聽起來很像一個學校作業。你有沒有試圖自己解決這個問題?如果是這樣,你的代碼在哪裏? – Tanner

回答

0

您應該能夠使用像

SELECT * 
FROM @Configuration c 
     CROSS APPLY (SELECT TOP 1 * 
        FROM @ConfigurationDetails cd 
        WHERE c.Code = cd.Code 
          AND (c.SubCode = cd.SubCode 
            OR c.SubCode IS NULL) 
        ORDER BY cd.SubCode DESC --Order the not null match first if it exists 
        ) CA 
0
WITH cte 
AS (
     SELECT a.ID, 
       a.Code, 
       a.SubCode, 
       b.SubCode as bSubCode, 
       b.Amt, 
       b.Data, 
       ROW_NUMBER() OVER(PARTITION BY a.CODE, a.SubCode ORDER BY B.SUBCODE desc) as RN 
      FROM @Configuration as a 
      LEFT JOIN @ConfigurationDetails as b ON b.Code = a.Code 
       AND (a.SubCode = b.SubCode OR b.SubCode IS NULL) 
     ) 
     SELECT * FROM cte 
     where rn=1 
相關問題