2016-07-18 5 views
1

Ich habe eine Tabelle wie folgt aus:den gemeinsamen Wert über Partition

Loan_Num asset LTV 
1   20 0.2 
2   20 0.2 
3   20 0.12 
4   20 0.2 
5   10 0.3 
6   10 0.3 
7   10 0.22 
8   10 0.3 

Und ich will von der Gruppe von Vermögenswerten einen gemeinsamen Wert dieser Tabelle hinzuzufügen.

Loan_Num asset LTV cV 
1   20 0.2 0.2 
2   20 0.2 0.2 
3   20 0.12 0.2 
4   20 0.2 0.2 
5   10 0.3 0.3 
6   10 0.3 0.3 
7   10 0.22 0.3 
8   10 0.3 0.3 

Irgendwelche Vorschläge, wie dies zu tun? Gibt es eine eingebaute Funktion für den gemeinsamen Wert?

+0

entfernt denke ich, dass er für den TLV bittet Wert, der am meisten für diese Partition wiederholt von –

+0

@GiladGreen - Das macht Sinn. Also '@ Jordan' in diesem Fall, was passiert, wenn es Bindungen gibt und zwei Werte gleich häufig sind? –

+0

der höchste von beiden. – Jordan1200

Antwort

1

Eine Möglichkeit, dies würde

WITH CTE1 
    AS (SELECT *, 
       COUNT(*) OVER (PARTITION BY [asset], [LTV]) AS C 
     FROM YourTable), 
    CTE2 
    AS (SELECT *, 
       RANK() OVER (PARTITION BY [asset] ORDER BY C DESC, [LTV] DESC) AS R 
     FROM CTE1) 
SELECT [Loan_Num], 
     [asset], 
     [LTV], 
     MAX(CASE 
      WHEN R = 1 
       THEN [LTV] 
      END) OVER (PARTITION BY [asset]) AS cV 
FROM CTE2 

Demo

Obwohl dies wäre etwas wirklich sein zu tun effizient sein, da es eine Art

WITH CTE1 
    AS (SELECT *, 
       COUNT(*) OVER (PARTITION BY [asset], [LTV]) AS C 
     FROM YourTable), 
    CTE2 
    AS (SELECT *, 
       MAX(C) OVER (PARTITION BY [asset]) AS MaxC 
     FROM CTE1) 
SELECT [Loan_Num], 
     [asset], 
     [LTV], 
     MAX(CASE 
      WHEN C = MaxC 
       THEN [LTV] 
      END) OVER (PARTITION BY [asset]) AS cV 
FROM CTE2