Guest User

Untitled

a guest
Sep 14th, 2017
16
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 1.65 KB | None | 0 0
  1. DROP TABLE IF EXISTS FeeTestClient;
  2.  
  3. CREATE TABLE FeeTestClient (Id INT IDENTITY(1,1) NOT NULL PRIMARY KEY, [Name] VARCHAR(16));
  4.  
  5. INSERT INTO FeeTestClient WITH (TABLOCK)
  6. ([Name])
  7. SELECT 'ZZZZZZZ' + CAST(RN AS VARCHAR(7))
  8. FROM
  9. (
  10.     SELECT TOP (3000000) ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) RN
  11.     FROM master..spt_values t1
  12.     CROSS JOIN master..spt_values t2
  13. ) t
  14. OPTION (MAXDOP 1);
  15.  
  16.  
  17. DROP TABLE IF EXISTS FeeTest_source;
  18.  
  19. CREATE TABLE FeeTest_source (ClientId INT, Fee INT, Val VARCHAR(16), Val2 VARCHAR(16));
  20. INSERT INTO FeeTest_source (ClientId, Fee, Val, Val2)
  21. VALUES (1, 15, 'Default', 'Default'),
  22.        (1, 10, 'Default', 'asdf'),
  23.        (2, 15, 'Default', 'Default'),
  24.        (2, 20, 'Default', 'qwer'),
  25.        (2, 10, 'zxcv', 'asdf'),
  26.        (3, 20, 'Default', 'Default');
  27.  
  28.  
  29. SELECT 3 * client.Id - 2 + client.Id % 3 AS ClientId
  30. , src.Fee
  31. , src.Val
  32. , src.Val2 into #t
  33. FROM FeeTest_source src
  34. INNER JOIN FeeTestClient client ON src.ClientId = 1 + client.Id % 3;    
  35.  
  36.  
  37. DROP TABLE IF EXISTS FeeTest;
  38.  
  39. CREATE TABLE FeeTest (FeeId INT IDENTITY(1,1) NOT NULL PRIMARY KEY, ClientId INT, Fee INT, Val VARCHAR(16), Val2 VARCHAR(16));
  40.  
  41. INSERT INTO FeeTest WITH (TABLOCK)
  42. (ClientId, Fee, Val, Val2)
  43. SELECT * FROM #t;
  44.  
  45. DROP TABLE #t;
  46.  
  47. CREATE INDEX COVERING ON FeeTest (ClientId) INCLUDE (Val, Val2, Fee);
  48.  
  49.  
  50.  
  51. -- here is the query to run
  52.  
  53. SELECT Id, [Name], oa.Fee
  54. FROM FeeTestClient ftc
  55. OUTER APPLY (
  56.     SELECT TOP 1 ft.Fee
  57.     FROM FeeTest ft
  58.     WHERE ft.ClientId = ftc.Id
  59.     ORDER BY
  60.         CASE WHEN Val <> 'Default' THEN 2 ELSE 0 END
  61.         + CASE WHEN Val2 <> 'Default' THEN 1 ELSE 0 END
  62.     DESC, ft.ClientId
  63. ) oa;
Advertisement
Add Comment
Please, Sign In to add comment