Quantcast
Channel: Unir vários selects
Viewing all articles
Browse latest Browse all 5

Unir vários selects

$
0
0

Boa noite pessoal,

Tenho os seguintes selects:

- Select 1

SELECT
   ISNULL(CONVERT(varchar, S.SolData, 103), 00) + ' ' + ISNULL(CONVERT(varchar, S.SolData, 108), '') 'Data de Abertura',
   ISNULL(CONVERT(varchar, S.Solvencimento, 103), 00) + ' ' + ISNULL(CONVERT(varchar, S.Solvencimento, 108), '') 'Data de Vencimento',
   R.Usunome 'Responsavel',
   CASE S.SolStatus
       WHEN 9 THEN 'Concluído'
       ELSE 'Não iniciado'
   END 'Status',
   M.DsModulo 'Sistema'    
FROM Solicitacao S
   LEFT JOIN MacroProcesso MP
       ON MP.MacProcID = S.MacProcID
   LEFT JOIN Modulo M
       ON M.ModID = S.ModID
   LEFT JOIN usuario R
       ON R.usuid = S.UsuIDResponsavel    
WHERE MP.DsMacProcesso = 'TAREFA'
   AND S.SOLSTATUS IN (5, 0, 1)


- Select 2

SELECT
   R.Usunome 'Responsavel',
   COUNT(S.SolID) 'Qtd',
   RANK() OVER (ORDER BY COUNT(S.SolID) DESC) AS 'Rank'    
FROM Solicitacao S
   LEFT JOIN MacroProcesso MP
       ON MP.MacProcID = S.MacProcID
   LEFT JOIN Modulo M
       ON M.ModID = S.ModID
   LEFT JOIN usuario R
       ON R.Usuid = S.UsuIDResponsavel    
WHERE MP.DsMacProcesso = 'TAREFA'
   AND S.SOLdata BETWEEN (CONVERT(char(10), GETDATE(), 103) + ' 00:00:00') AND (CONVERT(char(10), GETDATE(), 103) + ' 23:59:59')
GROUP BY R.Usunome


- Select 3

SELECT
   R.Usunome 'Responsavel',
   COUNT(S.SolID) 'Qtd',
   RANK() OVER (ORDER BY COUNT(S.SolID) DESC) AS 'Rank'    
FROM Solicitacao S
   LEFT JOIN MacroProcesso MP
       ON MP.MacProcID = S.MacProcID
   LEFT JOIN Modulo M
       ON M.ModID = S.ModID
   LEFT JOIN usuario R
       ON R.usuid = S.UsuIDResponsavel    
WHERE MP.DsMacProcesso = 'TAREFA'
   AND S.SolDataFechamento BETWEEN (CONVERT(char(10), GETDATE(), 103) + ' 00:00:00') AND (CONVERT(char(10), GETDATE(), 103) + ' 23:59:59')
   AND S.SolDataFechamento IS NOT NULL    
GROUP BY R.Usunome


- Select 4

SELECT
    R.Usunome 'Responsavel',
   AVG(CONVERT(decimal, DATEDIFF(DAY, S.SolData, S.SolDataFechamento))) 'MED Dias',
   (CONVERT(time(0), (CAST(FLOOR(AVG(S.TempoGastoTotal) / 60) AS varchar) + ':' + RIGHT('00' + CAST(FLOOR((AVG(S.TempoGastoTotal) % 60)) AS varchar), 2)), 120)) 'MED HHMMSS',
   RANK() OVER (ORDER BY AVG(CONVERT(decimal, DATEDIFF(DAY, S.SolData, S.SolDataFechamento))) ASC) AS 'Rank'    
FROM Solicitacao S
LEFT JOIN MacroProcesso MP
   ON MP.MacProcID = S.MacProcID
LEFT JOIN Modulo M
   ON M.ModID = S.ModID
LEFT JOIN usuario R
   ON R.usuid = S.UsuIDResponsavel    
WHERE MP.DsMacProcesso = 'TAREFA'
   AND S.SolDataFechamento BETWEEN (CONVERT(char(10), GETDATE() - DAY(GETDATE()) + 1, 103) + ' 00:00:00') AND (DATEADD(DD, -DAY(DATEADD(M, 1, GETDATE())), DATEADD(M, 1, GETDATE())) + ' 23:59:59')
   AND S.SolDataFechamento IS NOT NULL    
GROUP BY R.Usunome


- Select 5

SELECT
   R.Usunome 'Responsavel',
   COUNT(S.SolID) 'Qtd',
   RANK() OVER (ORDER BY COUNT(S.SolID) DESC) AS 'Rank'    
FROM Solicitacao S
   LEFT JOIN Complemento Comp
       ON S.SolID = Comp.SolID
   LEFT JOIN TipoComp TpComp
       ON TpComp.CompID = Comp.CompID
   LEFT JOIN MacroProcesso MP
       ON MP.MacProcID = S.MacProcID
   LEFT JOIN Modulo M
       ON M.ModID = S.ModID
   LEFT JOIN usuario R
       ON R.usuid = S.UsuIDResponsavel    
WHERE MP.DsMacProcesso = 'TAREFA'
   AND Comp.CompDesc = 'SIM'
   AND S.SolDataFechamento BETWEEN (CONVERT(char(10), GETDATE() - DAY(GETDATE()) + 1, 103) + ' 00:00:00') AND (DATEADD(DD, -DAY(DATEADD(M, 1, GETDATE())), DATEADD(M, 1, GETDATE())) + ' 23:59:59')
   AND S.SolDataFechamento IS NOT NULL
GROUP BY R.Usunome

O que eu gostaria de fazer é criar uma única tabela com o resultado desses selects, exemplo:

'Responsavel SQL1' 'Data de Abertura SQL1' 'Data de Vencimento SQL1' 'Qtd SQL2' ''Rank SQL2' 'Qtd SQL3' ''Rank SQL3'  e assim por diante.

Caso em um retorno de select não contenha informação para o 'Responsavel' a coluna fica varia.

É possível efetuar este tipo de operação?

Obrigad


Viewing all articles
Browse latest Browse all 5

Latest Images





Latest Images