Ho passato gli ultimi due giorni a lavorare su questo e sto girando in tondo.Sintassi SQL per ruotare tabelle multiple
La mia domanda è basato intorno la risposta che ho accettato in questo post: stackoverflow question
Ora ho i miei dati spostati da una singola tabella 400 colonna in una struttura di database molto più gestibile con molte grazie a Damir Sudarevic.
mio database si presenta così:
CREATE TABLE JobFiles (
JobID UNIQUEIDENTIFIER PRIMARY KEY,
MachineID UNIQUEIDENTIFIER REFERENCES Machines(MachineID),
[Desc] NVARCHAR(MAX),
Name NVARCHAR(255),
JobOpen BIT,
[CreateDate] DATETIME NOT NULL DEFAULT GETDATE(),
[ModifyDate] DATETIME NOT NULL DEFAULT GETDATE(),
[CreatedByUser] NVARCHAR(64) DEFAULT '',
[ModifiedByUser] NVARCHAR(64) DEFAULT '')
GO
CREATE TABLE JobParamType (
ParamTypeID UNIQUEIDENTIFIER PRIMARY KEY,
Name NVARCHAR(255),
[Desc] NVARCHAR(MAX),
IsTrait NVARCHAR)
GO
CREATE TABLE JobParamGroup (
ParamGroupID UNIQUEIDENTIFIER PRIMARY KEY,
Name NVARCHAR(255),
[Desc] NVARCHAR(MAX))
GO
CREATE TABLE JobParams (
ParamID UNIQUEIDENTIFIER PRIMARY KEY,
ParamTypeID UNIQUEIDENTIFIER REFERENCES JobParamType(ParamTypeID),
ParamGroupID UNIQUEIDENTIFIER REFERENCES JobParamGroup(ParamGroupID),
JobFileID UNIQUEIDENTIFIER REFERENCES JobFiles(JobID),
IsEnabled BIT)
GO
-- Text based property
CREATE TABLE JobTrait (
ParamID UNIQUEIDENTIFIER PRIMARY KEY REFERENCES JobParams(ParamID),
Value NVARCHAR(MAX))
GO
-- Numeric based property
CREATE TABLE JobMeasurement (
ParamID UNIQUEIDENTIFIER PRIMARY KEY REFERENCES JobParams(ParamID),
Value FLOAT,
Format NVARCHAR(20),
Unit NVARCHAR(MAX))
GO
Tuttavia, per una particolare funzione della mia applicazione ho bisogno di elencare ogni riga JobParamType.Name come colonne che contengono una o JobMeasurement.Value JobTrait. Valore come dati per ogni JobFiles.Name.
JobParamType.IsTrait viene utilizzato per determinare se un valore è una misura o un tratto.
cioè
JobName | ParamName1 | ParamName2 | ParamName3 ... | ParamName400
"MyJob" MesurementValue TraitValue MesurementValue ... TraitValue
"TestJob" MesurementValue TraitValue MesurementValue ... TraitValue
"Job2" MesurementValue TraitValue MesurementValue ... TraitValue
etc
Ho giocato con tavoli girevoli e sono riuscito a ottenere le colonne della tabella JobParamType, cercando in esempi e li segue, ma è ora ottenere abbastanza complicato perché la mia tecnica è diviso tra diversi tavoli e sta iniziando a farmi male alla testa !!!
DECLARE @cols NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT DISTINCT TOP 10 PERCENT
'],[' + tParams.Name
FROM dbo.JobParamType AS tParams
ORDER BY '],[' + tParams.Name
FOR XML PATH('')
), 1, 2, '') + ']'
print @cols
Spero che qualcuno possa aiutarmi con il pivoting e ottenere i dati da più tabelle.
Spero che questo abbia senso e attendo con impazienza il vostro aiuto e le vostre discussioni.
Grazie in anticipo.
Grazie ... il tuo tempo e gli sforzi sono molto apprezzati. Un po 'più complicato di prima, anche se questo compito sarebbe così, passerò il tuo esempio oggi e lo suddividerò in passaggi. – Belliez
Damir, sei un genio, grazie. Funziona perfettamente. Solo un'ultima domanda. Come potrei eseguire questo comando come hai sopra. Passaggio 5 "SELEZIONA txt FROM @qw" visualizza il comando in una tabella (tramite SQL Management Studio) e devo copiarlo e incollarlo in una nuova query. Ancora grazie, – Belliez
L'idea è di "impacchettare" la query finale in una vista, una procedura o una variabile, a seconda della frequenza con cui può cambiare l'elenco dei parametri. Se quei 400 parametri cambiano poche volte all'anno, usa la visualizzazione e costruisci le modifiche manualmente. Se cambiano ogni giorno, inseriscilo in una variabile ed esegui come SQL dinamico, automatizza anche i passaggi 3 e 4. –