Retorar Consulta Sql Server

31/03/2014

Olá, estou procurando uma solução para retornar numa view os resultados abaixo:

[img:descricao=resultado estilo agenda]http://arquivo.devmedia.com.br/forum/imagem/290142-20140331-143009.png[/img]

sendo que no banco tenho as seguintes tabelas:

[img:descricao=diagrama]http://arquivo.devmedia.com.br/forum/imagem/290142-20140331-143815.png[/img]

Gamal Ismail

Respostas

31/03/2014

Jefferson Santos

Veja se é isso que deseja:

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
Responder Citar

31/03/2014

Gamal Ismail

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:

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:

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:

[img:descricao=Consulta a Union]http://arquivo.devmedia.com.br/forum/imagem/290142-20140331-170303.png[/img]

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

31/03/2014

Jefferson Santos

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

31/03/2014

Gamal Ismail

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

[img:descricao=union + max]http://arquivo.devmedia.com.br/forum/imagem/290142-20140331-182256.png[/img]
Responder Citar

31/03/2014

Jefferson Santos

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 [img:descricao=union + max]http://arquivo.devmedia.com.br/forum/imagem/290142-20140331-182256.png[/img]


Nada..
Responder Citar