Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- DROP TABLE IF EXISTS FeeTestClient;
- CREATE TABLE FeeTestClient (Id INT IDENTITY(1,1) NOT NULL PRIMARY KEY, [Name] VARCHAR(16));
- INSERT INTO FeeTestClient WITH (TABLOCK)
- ([Name])
- SELECT 'ZZZZZZZ' + CAST(RN AS VARCHAR(7))
- FROM
- (
- SELECT TOP (3000000) ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) RN
- FROM master..spt_values t1
- CROSS JOIN master..spt_values t2
- ) t
- OPTION (MAXDOP 1);
- DROP TABLE IF EXISTS FeeTest_source;
- CREATE TABLE FeeTest_source (ClientId INT, Fee INT, Val VARCHAR(16), Val2 VARCHAR(16));
- INSERT INTO FeeTest_source (ClientId, Fee, Val, Val2)
- VALUES (1, 15, 'Default', 'Default'),
- (1, 10, 'Default', 'asdf'),
- (2, 15, 'Default', 'Default'),
- (2, 20, 'Default', 'qwer'),
- (2, 10, 'zxcv', 'asdf'),
- (3, 20, 'Default', 'Default');
- SELECT 3 * client.Id - 2 + client.Id % 3 AS ClientId
- , src.Fee
- , src.Val
- , src.Val2 into #t
- FROM FeeTest_source src
- INNER JOIN FeeTestClient client ON src.ClientId = 1 + client.Id % 3;
- DROP TABLE IF EXISTS FeeTest;
- CREATE TABLE FeeTest (FeeId INT IDENTITY(1,1) NOT NULL PRIMARY KEY, ClientId INT, Fee INT, Val VARCHAR(16), Val2 VARCHAR(16));
- INSERT INTO FeeTest WITH (TABLOCK)
- (ClientId, Fee, Val, Val2)
- SELECT * FROM #t;
- DROP TABLE #t;
- CREATE INDEX COVERING ON FeeTest (ClientId) INCLUDE (Val, Val2, Fee);
- -- here is the query to run
- SELECT Id, [Name], oa.Fee
- FROM FeeTestClient ftc
- OUTER APPLY (
- SELECT TOP 1 ft.Fee
- FROM FeeTest ft
- WHERE ft.ClientId = ftc.Id
- ORDER BY
- CASE WHEN Val <> 'Default' THEN 2 ELSE 0 END
- + CASE WHEN Val2 <> 'Default' THEN 1 ELSE 0 END
- DESC, ft.ClientId
- ) oa;
Advertisement
Add Comment
Please, Sign In to add comment