2016-07-20 3 views
0

Meine Datenbank ist in MySQLSQL, wie man eine Formel verwendet, um eine Spalte wie in Excel zu füllen

Ich habe eine Tabelle, sagen wir von 4 Spalten. Ich würde gerne wissen, ob es möglich ist, und wie Sie Folgendes implementieren: füllen Sie die vierte Spalte nach dem Wert der Spalte 2 und Spalte 3

In Excel habe ich eine Formel, lassen Sie uns ein Beispiel geben: if column2 Wert ist auf "grau" und Spalte3 Wert ist auf "Auto", dann Spalte 4 Wert sollte auf "Super"

Ich sage dies nur als ein Beispiel.

Meine richtige Formel in Excel wie folgt aussieht: = IF(K4=4;"Maximal";IF(K4>4;"Maximal";IF(K4=3;"Important";IF(K4>3;"Important";IF(K4=2;"Limited";IF(K4>2;"Limited";IF(K4=1;"Forgettable";IF(K4>1;"Forgettable";"error"))))))))

Allerdings mag ich es in SQL zu tun. Ich dachte daran, meine Tabelle bis zur Spalte 3 zu erstellen, Spalte 4 auf NULL oder leer zu setzen, dann eine in Java geschriebene GUI zu öffnen und dort eventuell einen Code zu schreiben, um Spalte 4 automatisch zu füllen, was in Spalte 2 und steht Spalte 3 (diese Werte können über die Auswahlliste ausgewählt werden). Aber wenn es eine Möglichkeit gibt, es direkt in SQL zu tun, bin ich interessiert

Thx viel im Voraus für Ihre Hilfe.

Grüße

+0

Was Sie wahrscheinlich wollen mit einem 'Case' Anweisung eine' Select' Abfrage verwenden: http://stackoverflow.com/ a/14189418/3047101 – Djeramon

+0

Ich benutze MySQL – tom

+0

"Füllen Sie eine Spalte" - bitte klären Sie, ob diese Spalte physisch in der Datenbank vorhanden sein soll, oder ob es nur ein Präsentationselement ist. –

Antwort

0

Sie eine SQL-Funktion erstellen können, können sagen, udfGetColumn4Value im column2, column3 als Parameter, um es zu nehmen und einen Wert zurückgeben.

Jetzt können Sie eine ausgewählte Spalte2, Spalte3, udfGetColumn4Value (Spalte2, Spalte3) aus Tabelle oder Abfrage wie gewünscht ausführen. Hoffe das hilft.

0

Sie waren nicht sehr genau in Bezug auf welches DBMS Sie verwenden. Und auch über die genaue Logik hinter der Verwendung Ihrer zwei Spalten.

UPDATE TableName 
SET Col4 = CASE WHEN col2 = 'red' AND col3 = 'car' THEN 'super' ELSE col2 + col3 END; 
:

Noch hier kommt eine wahrscheinliche SQL-Server-Lösung, wo ich eine Aussage getroffen haben CASE WHEN mit Ihrem Beispiel verwenden und verketteten Ihre zwei Spalten col2 und col3 sonst (Sie können Ihre weitere Logik hier gelten)

Sie sollten col2 + col3 durch Ihre weitere Logik ersetzen.

0

Es scheint, dass eine einfache UPDATE-Abfrage Ihr Problem lösen konnte:

update things set result = "super" where thing = "car" and color = "grey";

Die where -Klausel tut, was Sie sagen,

füllen die Spalte 4 nach tun wollen, was ist in Spalte 2 und Spalte 3

Ich erstellte hier eine Testtabelle on turorialspoint, dort können Sie überprüfen, ob es Ihren Bedürfnissen entspricht.

0

Sie können so versuchen;

select * from mytable 

COL1 COL2     
---- -------------------- 
0 -     
1 -     
2 -     
3 -     
4 -     

    4 record(s) selected. 


update mytable Set Col2 = 
Case 
When Col1<1 Then 'error' 
When Col1=1 Then 'Forget' 
When Col1=2 Then 'Limited' 
When Col1=3 Then 'Important' 
When Col1=4 Then 'Maximal' 
End" 


select * from mytable" 

COL1 COL2     
---- -------------------- 
0 Error     
1 Forget     
2 Limited    
3 Important   
4 Maximal    

    4 record(s) selected. 
1

Ja.Sie können ganz einfach NULL-Werte nach einigen Anforderungen für die anderen Werte in anderen Spalten einer bestimmten Zeile mit der Update-Anweisung

UPDATE <tablename> 
SET <column> = 'value' 
WHERE <condition> 

Der einzige Nachteil hier könnte sein, dass Sie für jedes Update-Anweisung erstellen müssen aktualisieren der Kombinationen Ihrer Werte in Spalte2 und Spalte3. (Es ist jedoch nicht viel Arbeit für Ihre Anzahl von Bedingungen).

ich ein Beispiel (Demo) erstellt:

  1. eine Tabelle in SQL Erstellen nach Ihrem Beispiel so aussehen könnte, habe ich eine vorübergehende im Interesse eines Beispiels:
CREATE GLOBAL TEMPORARY TABLE demoTable (
"Col1" VARCHAR2(50 BYTE) NOT NULL, 
"Col2" VARCHAR2(50 BYTE) NOT NULL, 
"Col3" VARCHAR2(50 BYTE) NOT NULL, 
"Col4" VARCHAR2(50 BYTE) DEFAULT NULL 
) 
ON COMMIT PRESERVE ROWS 
  1. ich auch einige Dummy-Daten eingefügt:

INSERT INTO demoTable VALUES ('Charles', 'grey', 'car', NULL); INSERT INTO demoTable VALUES ('Alice', 'grey', 'bike', NULL); INSERT INTO demoTable VALUES ('Bob', 'red', 'car', NULL);

Das Ergebnis:

enter image description here

  1. Erstellen Sie nun die Update-Anweisungen wie diese, für Beispiel:
UPDATE demoTable dt 
SET dt."Col4" = 'super' 
WHERE dt."Col2" = 'grey' AND dt."Col3" = 'car'; 

Das Ergebnis

enter image description here

Verwandte Themen