it-swarm.com.de

Groß- und Kleinschreibung, wenn sich ein Wert von einem anderen Wert unterscheidet, SQL Server

Ich habe diese Tabellenstruktur für die Tabelle prices:

CREATE TABLE prices
(
     id int, 
     priceFrom int, 
     priceUp int
);

INSERT INTO prices (id, priceFrom, priceUp)
VALUES (1, 23, 23), (2, 0, 0), (3, 12, 13),
       (4, 40, 40), (5, 15, 15), (6, 0, 0);

Das ist das Ergebnis:

 enter image description here

Ich habe diese Frage:

select 
    pricefrom, priceup,
    case
        when pricefrom = 0 then null
        when priceFrom <> priceUp then priceFrom + ' - ' + priceUp
        when priceFrom = priceUp then priceFrom
    end as FinalPrice
from 
    prices

was ich brauche, ist einen Fall zu machen, wenn

  1. pricefrom = 0 dann zeige null
  2. pricefrom = priceup zeigt dann den Preis an
  3. Zumindest wenn pricefrom! = Priceup Ich möchte zum Beispiel folgendes zeigen: 12 (pricefrom) - 13 (priceup)

aber in meiner Abfrage in dieser Zeile:

 enter image description here

Ich versuche dies mit <> zu tun, aber im Ergebnis erscheint die Summe für beide Zahlen:

 enter image description here

Wie kann ich das beheben?

23
Esraa_92

Ich denke, Sie suchen nach der concat Funktion hier.

 select pricefrom, priceup,
case
when pricefrom = 0 then null
when priceFrom <> priceUp then concat(priceFrom, ' - ', priceUp)
when priceFrom = priceUp then cast(priceFrom as varchar(8))
end as FinalPrice
from prices

Dieser Link wird wahrscheinlich hilfreich sein

MySQL kombinieren zwei Spalten in einer Spalte

10

Sie haben den Fehler nicht angegeben, aber aufgrund des Formats Ihres CASE EXPRESSION gehe ich davon aus, dass er aufgrund der Konvertierung einen Fehler auslöst.

Sie sollten CAST to VARCHAR verwenden:

 select pricefrom, priceup,
       case
           when pricefrom = 0 then ''
           when priceFrom <> priceUp then CAST(priceFrom as varchar(10)) + ' - ' + CAST(priceUp as varchar(10))
           when priceFrom = priceUp then CAST(priceFrom as varchar(10))
      end as FinalPrice
 from prices

Ich bin mir bei der ersten WHEN nicht sicher, aber das solltest du wissen:

normalerweise wird die erste Bedingung eines CASE EXPRESSIONbestimmtden Typ der Spalte). Wenn also die erste THEN eine Ganzzahl setzt, ist diese Spalte eine Ganzzahl.

da Sie einen Nullwert eingeben, bin ich mir nicht sicher, auf welchen Typ die Spalte ausgewertet wird. Es kann also trotzdem ein Fehler ausgegeben werden, aber Sie können es versuchen:

           when pricefrom = 0 then null

Anmerkung:Like @ aakashpugta.0205 answer, using CONCAT() Die Konvertierung erfolgt automatisch, aber Sie sollten wissen, dass CONCAT() nur seit 2012 auf SQL-Server verfügbar ist, also in älteren Versionen, die nicht funktionieren!

Ich möchte Sie auch auf einen interessanten Artikel über CASE EXPRESSION secrets hinweisen.

7
sagi

Sie müssen CAST zu VARCHAR:

select pricefrom, priceup,
       case
          when pricefrom = 0 then null
          when priceFrom <> priceUp then concat(cast(priceFrom as varchar(8)),
                                                ' - ', 
                                                cast(priceUp as varchar(8)))
          when priceFrom = priceUp then cast(priceFrom as varchar(8))
       end as FinalPrice
from prices
6
Giorgos Betsos

Sie sollten die Preisfelder als Zeichenfolge umwandeln, damit SQL versteht, dass Sie sie nicht als Zahlen behandeln und eine mathematische Operation ausführen möchten:

select pricefrom, priceup,
case
when pricefrom = 0 then null
when priceFrom <> priceUp then cast(priceFrom as varchar) + ' - ' + cast(priceUp as varchar)
when priceFrom = priceUp then priceFrom
end as FinalPrice
from prices
1
ADyson