1

* Aktualisierte - Bitte siehe unten (Hinter dem Bild)rSQL While-Schleife einfügen

ich wirklich mit diesem Problem stecken bin, ich habe zwei Tabellen, Projekte und Projekt Zuteilungen, werden sie von der Projekt-ID verbunden.

Mein Ziel besteht darin, die Spalten einer geänderten Projekttabelle mit den Zeilen der Projektzuweisungstabelle aufzufüllen. Ich habe unten ein Bild eingefügt, um zu veranschaulichen, was ich erreichen möchte.

Ein Projekt kann bis zu 6 Projektzuordnungen haben. Jede Projektzuweisung hat eine Autoinkrement-ID (Zuweisungs-ID), aber ich kann diese ID nicht in Unterauswahlen verwenden, da sie nicht in einem Bereich von 1-6 liegt, sodass ich unterscheiden kann, wer der erste PA2 ist und wer PA3.

Beispiel:

(SELECT pa1.name FROM table where project.projectid = project_allocations.projectid and JVID = '1') as [PA1 Name], 

(SELECT pa2.name FROM table where project.projectid = project_allocations.projectid and JVID = '1') as [PA2 Name], 

enter image description here

Die modifizierte Projects Tabelle hat Spalten für PA1, PA2, PA3. Ich muss diese Spalten basierend auf der Tabelle für die Projektzuweisung auffüllen. Daher wird der erste Datensatz in der Datenbank für jedes Projekt PA1 sein.

Ich habe einen SQL-Agent-Job zusammengestellt, der diese Tabelle mit den hinzugefügten Spalten löscht und neu erstellt, so dass es mehr darum geht, die Zeilen der Projektrealisierung in die Tabelle der geänderten Projekte by row_num zu schreiben.

Irgendwelche Ratschläge?

--update

Was ich jetzt tun muß, ist der row_number als eine Spalte für jedes Projekt in der Reihenfolge der DESC hinzugefügt zu bekommen.

Also die erste Zeile für jede Projekt-ID wird 1 sein und für jede Zeile danach 2,3,4,5,6.

Ich habe den folgenden Code auf dieser Website zu finden:

use db_name 
with cte as 
     (
      select * 
      , new_row_id=ROW_NUMBER() OVER (ORDER BY eraprojectid desc) 
      from era_project_allocations_m 
     where era_project_allocations_m.eraprojectid = era_project_allocations_m.eraprojectid 
     ) 
update cte 
set row_id = new_row_id 

update cte 
set row_id = new_row_id 

Ich habe als eine Spalte in dem vorherigen SQL Agenten Schritt und diesen Code hinzugefügt row_id und es läuft, aber es produziert mir nicht row_number für jede projectid.

enter image description here

Wie Sie aus dem obigen Bild sehen können; Ich brauche 1-2 FOR je Projekt ID - effektiv gibt mir Tausende von 1s, 2s, 3s, 4s.

So kann ich sie in Spalten sortieren können :)

+0

Besser als ein Bild, um einige Beispieldaten und die erwarteten Ausgang zu liefern war. Und bitte etikettieren Sie Ihre Frage mit der entsprechenden Version Ihres SQL-Servers. – Shnugo

+0

Hier ist ein großartiger Ort, um zu beginnen. http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ Und FWIW Ich bezweifle, dass Sie eine Schleife benötigen, um Daten einzufügen. –

+0

@SeanLange Ich bin mir nicht sicher, die Tabelle wird nicht selbst aktualisiert; Es wird verwendet, um DB-Ansichten für ein Front-End zu erstellen, so dass ein SQL-Job nachts ausgeführt wird, um die Daten auf den neuesten Stand zu bringen. – Justin

Antwort

1

Von dem, was ich eine Abfrage mit Zeilennummer sagen kann, ist, was Sie nach. (Auch könnte es eine Pivot-Tabelle sein ..)

Beispiel:

create table Something (
    someId int, 
    someValue varchar(255) 
); 

insert into Something values (1, 'one'), (1, 'two'), (1, 'three'), (1, 'four'), (2, 'ein'), (2, 'swei'), (3, 'un') 

with cte as (
select someId, 
     someValue, 
     row_number() over(partition by someId order by someId) as rn 
from Something 
) 
select distinct someId, 
     (select someValue from cte where ct.someId = someId and rn = 1) as value1, 
     (select someValue from cte where ct.someId = someId and rn = 2) as value2, 
     (select someValue from cte where ct.someId = someId and rn = 3) as value3, 
     (select someValue from cte where ct.someId = someId and rn = 4) as value4 
into somethingElse 
from cte ct; 

select * from somethingElse; 

Ergebnis:

someId value1 value2 value3 value4 
1  one  two  three four 
2  ein  swei NULL NULL 
3  un  NULL NULL NULL 
+0

Ja, in der Tat, Zeilennummer ist, was ich suche. Ich muss die Row_Number als Nicht-Null hinzufügen; Nicht eindeutiges Feld, das nach dem Erstellen der ersten Zeilen ausgefüllt wird. – Justin

+0

Sie können vielleicht auswählen in? aktualisiert meine Antwort .. – Tobb

+0

Für gerade jetzt, was ich versuche zu tun ist einfach eine Zeile Zeile Spalte hinzugefügt und befüllt für jede ProjektID - So kann ich Sub-Selects sehen, um wieder, was ich brauche. Ich werde die Hauptfrage in Kürze mit weiteren Informationen aktualisieren. – Justin