У меня есть этот запрос (SQL скрипка внизу):
DECLARE @DynamicPivotQuery AS NVARCHAR(MAX)
DECLARE @ColumnName AS NVARCHAR(MAX)
DECLARE @listaId as NVARCHAR(MAX)
SET @listaId = @selezione
SELECT @ColumnName = ISNULL(@ColumnName + ',','')+ QUOTENAME(CONVERT(DATE,data,105)) FROM (SELECT DISTINCT FORMAT ( data, 'd', 'it-IT' ) as data FROM PIANOLAVORO WHERE (data>=@dataDa and data<=@dataA)) AS [data]
SET @DynamicPivotQuery = ';WITH CTE AS(
SELECT v.data,t.cognome,s.CVDESCR FROM pianolavoro v
INNER JOIN orari s ON s.id = v.idorario
INNER JOIN dbstartprv.dbo.ANAGRAFICO_DATI t ON t.id = v.iddip
WHERE v.IDDIP in('+@listaId+')
)
SELECT COGNOME,'+@ColumnName+' FROM CTE
PIVOT (MAX(CVDESCR) FOR [data] IN('+@ColumnName+')) p
ORDER BY cognome ASC'
EXEC(@DynamicPivotQuery)
, который дает мне результат в этой форме:
2019-03-01 2019-03-02 ...
jack A B
john B A
A и B получаются из этого объединенияINNER JOIN orari s ON s.id = v.idorario
и я бы хотел показывать другие данные вместо A, B, только если в тот же день что-то существует в другой таблице.Это объединение, которое будет добавлено в приведенном выше запросе join giustif g on t.id=g.iddip and g.idvoce=1001
В основном, если в таблице pianolavoro 1-го марта у Джека есть «A», но также он имеет значение на том же самомдень в таблице giustif (скажем, я получаю только значения id = 1001), я хочу отобразить это:
2019-03-01 2019-03-02 ...
jack 1001 B
john B A
SQL FIDDLE Если вы запускаете скрипку: у пользователя Cozzolino есть 2 отдыхадни (1-2 июня) и 5 рабочих дней (3-7 июня), а 6 и 7 июня он имеет запись в таблице giustif.Теперь мой запрос дает мне результат, как в скрипке, но я хочу, чтобы он был таким:
2019-06-01 2019-06-02 ... 2019-06-05 2019-06-06
Cozzolino REST REST ... WORK 1001
Как мне этого добиться?Спасибо