Ich habe die folgende Tabellenstruktur:SQL Server: Reuse berechnete Variable in select-Klausel
col1 col2 col3 col4
-------------------------------
aK Mbcd ABc defgh
col2
, col3
und col4
Spalten sind vom Typ varchar(100)
und col1
hat varchar(500)
geben.
Ich brauche eine Auswahlabfrage die Ausgabe wie folgt
col1 col2 col3 col4
-------------------------------
aK,Mb cd,A Bc,d efgh
Logic, wie unten erwähnt erklärt haben: maximal 4 Zeichen Im Ergebnis Col2, col3 und col4
haben aber col1 kann mehr als 4 Zeichen bis zu 100 haben.
Wenn eine Spalte mehr Zeichen hat, werden die letzten 4 Zeichen in derselben Spalte und anderen beibehalten Zusätzliche Spalten werden mit dem Wert der vorherigen Spalte verknüpft, getrennt durch Komma ,, und dieselbe Regel wird auch auf die verketteten Werte angewendet.
Ich habe die folgende T-SQL-Anweisung geschrieben. Es funktioniert gut für die letzten zwei Spalten. Aber ich will neue berechnete Wert col3 verwenden, zusätzliche Zeichen abzustreifen, nachdem einige von col4 Zugabe
SELECT
CASE
WHEN X.Col4Length > 4
THEN concat(X.col3, ',', substring(x.col4, 0, X.Col4Length - 3))
ELSE X.col3
END AS col3,
CASE
WHEN X.Col4Length > 4
THEN substring(x.col4, X.Col4Length - 3, x.Col4Length)
ELSE X.col4
END AS col4
FROM
(SELECT
Col1, Col2, Col3, Col4,
Len(Col1) AS Col1Length,
Len(Col2) AS Col2Length,
Len(Col3) AS Col3Length,
Len(Col4) AS Col4Length
FROM
mytable) X
Es scheint, als ob Sie SQL hier missbrauchen - fühlt sich mehr an Wie ein Präsentationsthema, das an einer Datenquelle liegt, und daher wahrscheinlich besser in einem Anwendungs-/Berichtswerkzeug behandelt wird als in SQL. Offensichtlicher Randfall - was ist, wenn die Gesamtmenge an Text die von Ihnen angegebenen Kapazitäten überschreitet? Z.B. Eingabegrößen sind '(100,100,100,100)' und Ausgabegrößen sind '(100,4,4,4)'. –
Ok danke für das Aufzeigen eines anderen Problems. Ich werde col1 Größe auf '500' setzen –