944 messaggi dal 11 febbraio 2013
Se fai una tabella su un mdb o un xls e lo condividi ci provo

Metti la tabella che hai e come la vuoi...

Altrimenti spero qlkuno ti aiuti


Ciao
369 messaggi dal 08 dicembre 2006
Ciao jjchuck. A questo link ho caricato un file excel di esempio:https://www.dropbox.com/s/d10j0zwplwrdjm4/Book1.xlsx?dl=0

Spero sia chiaro. Grazie 1000!
944 messaggi dal 11 febbraio 2013
Questa recupera le date e le converte in colonne
Ora io ho messo una somma nella Pivot...non so se è quello che ti serve
se non è cosi e hai valori distinct forse con Max risolvi...anche se non credo sia la soluzione migliore


DECLARE @dates NVARCHAR (MAX)

SELECT @dates = COALESCE (@dates + ',[' + CONVERT(NVARCHAR, [DATE], 106) + ']', 
               '[' + CONVERT(NVARCHAR, [date], 106) + ']')
               FROM    (SELECT DISTINCT [date] FROM dbo.Test) PV  
               ORDER BY [date]


DECLARE @query NVARCHAR(MAX)
SET @query = '

SELECT *
FROM
(
 SELECT [date], 
         CASE WHEN col = ''efficiency_1'' THEN ''efficiency_1''
          WHEN col = ''efficiency_2'' THEN ''efficiency_2''
          WHEN col = ''efficiency_3'' THEN ''efficiency_3''
         END  new_col , value 
 FROM
 (
   SELECT *
    FROM dbo.Test   
 )tab 
 
  UNPIVOT
  (
    value
     FOR col IN ([efficiency_1], [efficiency_2],[efficiency_3])
  )  UNPIV
  
)SRC
  
PIVOT (
       SUM(value) FOR [date] IN (' + @dates + ')

) AS Pt1 '

EXEC SP_EXECUTESQL @query
369 messaggi dal 08 dicembre 2006
Ciao, apprezzo davvero il tuo aiuto! Io uso MySql, e devo dire che il primo approccio con SQL Server non è "male". Ho degli errori, colpa sicuramente mia perchè per snellire la query qui ho omesso delle condizioni. Ora la riposto. L'errore che ho è che non trova dichiarati i nomi delle colonne "efficiency_?".
Questa è la query integrale:
select tab_source.date, 
               sum(tab_source.eff1) as efficiency_1, 
         sum(tab_source.eff2) as efficiency_2, 
         sum(tab_source.eff3) as efficiency_3


from 
(select TBL_data.date, TBL_data.shift, TBL_data.id_line, 
iif(shift=1 and (sum(convert(decimal(5,2),TBL_data.downtime_min))+sum(convert(decimal(5,2),TBL_data.runtime_min)))>0,
sum(convert(decimal(5,2),TBL_data.runtime_min))/(sum(convert(decimal(5,2),TBL_data.downtime_min))+
sum(convert(decimal(5,2),TBL_data.runtime_min)))*100,0) as eff1,

iif(shift=2 and (sum(convert(decimal(5,2),TBL_data.downtime_min))+sum(convert(decimal(5,2),TBL_data.runtime_min)))>0,
sum(convert(decimal(5,2),TBL_data.runtime_min))/(sum(convert(decimal(5,2),TBL_data.downtime_min))+
sum(convert(decimal(5,2),TBL_data.runtime_min)))*100,0) as eff2,

iif(shift=3 and (sum(convert(decimal(5,2),TBL_data.downtime_min))+sum(convert(decimal(5,2),TBL_data.runtime_min)))>0,
sum(convert(decimal(5,2),TBL_data.runtime_min))/(sum(convert(decimal(5,2),TBL_data.downtime_min))+
sum(convert(decimal(5,2),TBL_data.runtime_min)))*100,0) as eff3
               
               
from [IGNT_dev].[dbo].[TBL_data]
join [IGNT_dev].[dbo].[profiles]
on profiles.id=TBL_data.id_profile
where TBL_data.id_line = 3

group by TBL_data.shift, TBL_data.date, TBL_data.id_line, profiles.speed) 
as tab_source 

where 1=1
group by tab_source.date
order by tab_source.date


Ora io ho messo una somma nella Pivot...non so se è quello che ti serve
si è quello che mi serve.


Grazie ancora!
Modificato da inactive il 24 marzo 2018 11.22 -
944 messaggi dal 11 febbraio 2013
Non ho visto la tua view ma se è in Tsql allora sostituiscila alla parte
Select * from test

e vedi se compila

La tua view deve avere come risultato i campi
date,
efficiency_1
2
3
Ok?
Cmq devi copiare tutto quello che ho postato....è una query dinamica
Ciao
Modificato da jjchuck il 24 marzo 2018 12.16 -
369 messaggi dal 08 dicembre 2006
Ciao, e prima di tutto auguri di buone Palme!

Allora, se ho capito bene dal tuo ultimo messaggio, devo incollare la mia query nella tua in questo punto:
 SELECT *
    FROM dbo.Test   


L'ho fatto ma ottengo questo messaggio di errore:
Messaggio 207, livello 16, stato 1, riga 24
Invalid column name ''.
Messaggio 207, livello 16, stato 1, riga 25
Invalid column name ''.


e le righe indicate da Management Studio sono queste:

sum(tab_source.eff2) as efficiency_2, 
sum(tab_source.eff3) as efficiency_3


Non so, a me sembra che vengano indicati i nomi uguali per queste colonne.


Forse si porta dietro qualche altro errore.

SELECT [date], 
         CASE WHEN col = ''efficiency_1'' THEN ''efficiency_1''
          WHEN col = ''efficiency_2'' THEN ''efficiency_2''
          WHEN col = ''efficiency_3'' THEN ''efficiency_3''
         END  new_col , value 
 FROM
 (
select tab_source.date, 
sum(tab_source.eff1) as efficiency_1, 
sum(tab_source.eff2) as efficiency_2, 
sum(tab_source.eff3) as efficiency_3
from ....


Grazie ancora e mi raccomando...contegno a tavola...;)
Modificato da inactive il 25 marzo 2018 12.17 -
944 messaggi dal 11 febbraio 2013
E' tutto rosso in management studio quando hai sostituito
SELECT * FROM TEST
con la tua?

cmq credo tu sia vicino alla soluzione

quando ho scritto la vista che ti ho postato ho creato questa tabella
CREATE TABLE [dbo].[Test](
  [date] [date] NULL,
  [efficiency_1] [float] NULL,
  [efficiency_2] [float] NULL,
  [efficiency_3] [float] NULL
) ON [PRIMARY]


creala e scrivi dentro dei valori
a questo punto quello che ti ho girato deve funzionare anche a te come a me

devi capire cosa non va nella tua vista o comunque adattarla...sarà una sciocchezza
cmq di piu non posso fare
dovrei avere le tue tabelle

cmq lavoraci un po e vedrai che risolvi facile
369 messaggi dal 08 dicembre 2006
Ho visto meglio ed ho trovato stupidi errori di sintassi. Era quello che volevo! Grazie ancora per il tuo tempo.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.