2017-07-20 3 views
0

Ich habe eine Tabelle, wie unten,aktualisieren, wenn die ID auf der gleichen Tabelle wird passend

s_id s_score name category subcategory 
123 10  core account subscription 
123 10  core values numeric 
456 9  esr public movies 
789 6  john service others 
789 6  john digital others 

, in dem ich suche die die s_score Spalte, wenn meine ID ist dieselbe zu aktualisieren. Ich brauche nur eine Punktzahl und aktualisiere die andere auf null. Erwartete Ausgabe wie unten.

s_id s_score name category subcategory 
123 10  core account subscription 
123   core values numeric 
456 9  esr public movies 
789 6  john service others 
789   john digital others 

Vielen Dank im Voraus.

+0

verwiesen wird. Woher wissen Sie, welche Zeile Sie aktualisieren möchten und welche Sie annullieren möchten? –

+0

Es sieht so aus, als ob dein Modell falsch ist. Es wäre besser, wenn Sie das als zwei Tabellen modellieren würden: eine für die Partitur ('s_id',' s_score', 'name') und eine für die Kategorie (' s_id', 'category',' subcategory'), damit Sie kann nur eine einzige Punktzahl speichern. –

+0

Vielen Dank für Ihre Antwort. Yeah tatsächlich Punktzahl und Kategorien sind aus verschiedenen Tabellen, wenn ich beitreten habe ich 2 Werte als meine s_id hat 2 Kategorien für die gleiche s_id .. also wenn meine s_id wiederholt dann muss ich nur eine s_score nehmen und andere als halten Null. – Rajesh

Antwort

1

mache ich etwas bedingt basierend auf der Ausgabe einer ROW_NUMBER Funktion kann Ihnen helfen. Etwas herstellen mehrere Annahmen über Ihr Datenmodell basiert auf Ihre Kommentare, sollte die folgende Nähe zu dem, was Sie suchen:

SELECT s.s_id, 
case when row_number() 
    over (partition by s_id order by c.category) = 1 then s_score else null end as s_score, 
s.name, c.category, c.subcategory 
from s_scores s 
join categories c on s.s_id = c.s_id 

Für jede s_id es gibt dir eine Zeilennummer für die Kategorien in diesem s_id. Wenn die Zeilennummer 1 ist (d. H. Es ist der erste Kategoriedatensatz für die s_id), wird die Punktzahl zurückgegeben. Für andere Zeilennummern wird null zurückgegeben.

Dies ist nach Kategorie sortiert, die nach Ihren erwarteten Ergebnissen falsch zu sein scheint, daher meine Frage, welche Zeile sollte die Punktzahl haben und welche Null sein sollte. Wenn Sie das wissen, aktualisieren Sie einfach das Feld, auf das in der order by

+1

Danke für deine Wiederholung. Es hat mir wirklich geholfen. – Rajesh

-1

Sie können Update-Abfrage wie folgt verwenden;

update tableName set s_core='32' where s_id='123' 
+0

Danke für deine Wiederholung .. das wird mir nicht helfen. – Rajesh

Verwandte Themen