Array
(
)

Retorar Consulta Sql Server

Gamal Ismail
   - 31 mar 2014

Olá, estou procurando uma solução para retornar numa view os resultados abaixo:
resultado estilo agenda (Clique na imagem para abrir em uma nova janela)
sendo que no banco tenho as seguintes tabelas:
diagrama (Clique na imagem para abrir em uma nova janela)

Jefferson Santos
   - 31 mar 2014

Veja se é isso que deseja:

#Código

SELECT H.IDHOR, P.DESPROF, S.NOMCLI TB_AGENDA A
JOIN TB_HOR_AGE H
ON
H.IDFOR = A.IDHOR
JOIN TB_PROFISSIO P
ON 
P.IDPROF = A.IDPROF
JOIN TB_SALAO S
ON
S.IDAGE = A.IDAGE

Gamal Ismail
   - 31 mar 2014

Obrigado Jefferson pela resposta...

Não consegui aplicar seu exemplo na minha consulta com base nas tabelas.

Talvez possa me ajudar a reparar a consulta que fiz, qual chegou mto próximo do resultado. usando UNION.

Fiz uma consulta de UNION assim:

#Código

SELECT        TB_AGENDA_1.DIVISAO AS Horario, dbo.TB_PARCEIROS.NOMCLI AS Leandro, CAST(NULL AS VARCHAR(MAX)) AS  RODRIGO, CAST(NULL AS VARCHAR(MAX)) AS VIVIANE, CAST(NULL AS VARCHAR(MAX)) AS TATIANE, CAST(NULL AS VARCHAR(MAX)) AS TAINA
FROM            dbo.TB_AGENDA AS TB_AGENDA_1 INNER JOIN
                         dbo.TB_SALAO ON TB_AGENDA_1.IDAGE = dbo.TB_SALAO.IDAGE INNER JOIN
                         dbo.TB_PARCEIROS ON dbo.TB_SALAO.IDCLI = dbo.TB_PARCEIROS.IDCLI
GROUP BY TB_AGENDA_1.DIVISAO, TB_AGENDA_1.IDPROF, dbo.TB_PARCEIROS.NOMCLI
HAVING        (TB_AGENDA_1.IDPROF = 1)

UNION

SELECT        TB_AGENDA_1.DIVISAO AS Horario, Null AS Leandro, dbo.TB_PARCEIROS.NOMCLI AS RODRIGO, CAST(NULL AS VARCHAR(MAX)) AS VIVIANE,CAST(NULL AS VARCHAR(MAX)) AS TATIANE, CAST(NULL AS VARCHAR(MAX)) AS TAINA
FROM            dbo.TB_AGENDA AS TB_AGENDA_1 INNER JOIN
                         dbo.TB_SALAO ON TB_AGENDA_1.IDAGE = dbo.TB_SALAO.IDAGE INNER JOIN
                         dbo.TB_PARCEIROS ON dbo.TB_SALAO.IDCLI = dbo.TB_PARCEIROS.IDCLI
GROUP BY TB_AGENDA_1.DIVISAO, TB_AGENDA_1.IDPROF, dbo.TB_PARCEIROS.NOMCLI
HAVING        (TB_AGENDA_1.IDPROF = 4)

UNION

SELECT        TB_AGENDA_1.DIVISAO AS Horario, CAST(NULL AS VARCHAR(MAX)) AS Leandro, CAST(NULL AS VARCHAR(MAX)) AS RODRIGO, dbo.TB_PARCEIROS.NOMCLI AS VIVIANE, CAST(NULL AS VARCHAR(MAX)) AS TATIANE, CAST(NULL AS VARCHAR(MAX)) AS TAINA
FROM            dbo.TB_AGENDA AS TB_AGENDA_1 INNER JOIN
                         dbo.TB_SALAO ON TB_AGENDA_1.IDAGE = dbo.TB_SALAO.IDAGE INNER JOIN
                         dbo.TB_PARCEIROS ON dbo.TB_SALAO.IDCLI = dbo.TB_PARCEIROS.IDCLI
GROUP BY TB_AGENDA_1.DIVISAO, TB_AGENDA_1.IDPROF, dbo.TB_PARCEIROS.NOMCLI
HAVING        (TB_AGENDA_1.IDPROF = 2)

UNION

SELECT        TB_AGENDA_1.DIVISAO AS Horario, CAST(NULL AS VARCHAR(MAX)) AS Leandro, CAST(NULL AS VARCHAR(MAX)) AS RODRIGO, CAST(NULL AS VARCHAR(MAX)) AS VIVIANE, dbo.TB_PARCEIROS.NOMCLI AS TATIANE, CAST(NULL AS VARCHAR(MAX)) AS TAINA
FROM            dbo.TB_AGENDA AS TB_AGENDA_1 INNER JOIN
                         dbo.TB_SALAO ON TB_AGENDA_1.IDAGE = dbo.TB_SALAO.IDAGE INNER JOIN
                         dbo.TB_PARCEIROS ON dbo.TB_SALAO.IDCLI = dbo.TB_PARCEIROS.IDCLI
GROUP BY TB_AGENDA_1.DIVISAO, TB_AGENDA_1.IDPROF, dbo.TB_PARCEIROS.NOMCLI
HAVING        (TB_AGENDA_1.IDPROF = 3)

UNION

SELECT        TB_AGENDA_1.DIVISAO AS Horario, CAST(NULL AS VARCHAR(MAX)) AS Leandro, CAST(NULL AS VARCHAR(MAX)) AS RODRIGO, CAST(NULL AS VARCHAR(MAX)) AS VIVIANE, CAST(NULL AS VARCHAR(MAX)) AS TATIANE, dbo.TB_PARCEIROS.NOMCLI AS TAINA
FROM            dbo.TB_AGENDA AS TB_AGENDA_1 INNER JOIN
                         dbo.TB_SALAO ON TB_AGENDA_1.IDAGE = dbo.TB_SALAO.IDAGE INNER JOIN
                         dbo.TB_PARCEIROS ON dbo.TB_SALAO.IDCLI = dbo.TB_PARCEIROS.IDCLI
GROUP BY TB_AGENDA_1.DIVISAO, TB_AGENDA_1.IDPROF, dbo.TB_PARCEIROS.NOMCLI
HAVING        (TB_AGENDA_1.IDPROF = 5)


Depois pra tentar reparar o agrupamento
fiz uma outra consulta usando a UNION acima, como segue:

#Código
SELECT        Horario, Leandro, RODRIGO, VIVIANE, TATIANE, TAINA
FROM            dbo.SP_UNION_AGENDA
GROUP BY Horario, Leandro, RODRIGO, VIVIANE, TATIANE, TAINA


O resultado fica mto próximo ao que preciso:

Consulta a Union (Clique na imagem para abrir em uma nova janela)

Mas como pode observar, preciso agrupar os Nomes e os Campos NULL pra fechar a agenda e o horario.

Jefferson Santos
   - 31 mar 2014

Para deixar otimizar isso pode utilizar a clausula Cross Apply e com os campos NULL pode utilizar a clausula ISNULL

Gamal Ismail
   - 31 mar 2014

Obrigado pela atenção Jefferson

Consegui finalizar a consulta e obter o resultado usando [MAX]

SELECT Horario, MAX(Leandro) AS Leandro, MAX(RODRIGO) AS RODRIGO, MAX(VIVIANE) AS VIVIANE, MAX(TATIANE) AS TATIANE, MAX(TAINA) AS TAINA
FROM dbo.SP_UNION_AGENDA
GROUP BY Horario

union + max (Clique na imagem para abrir em uma nova janela)

Jefferson Santos
   - 31 mar 2014


Citação:
Obrigado pela atenção Jefferson

Consegui finalizar a consulta e obter o resultado usando [MAX]

SELECT Horario, MAX(Leandro) AS Leandro, MAX(RODRIGO) AS RODRIGO, MAX(VIVIANE) AS VIVIANE, MAX(TATIANE) AS TATIANE, MAX(TAINA) AS TAINA
FROM dbo.SP_UNION_AGENDA
GROUP BY Horario

union + max (Clique na imagem para abrir em uma nova janela)


Nada..