Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

mssilva

Inclusão com critério

Recommended Posts

Ola colegas sou novo aqui no fórum tenho uma dúvida que não consigo resolver, é o seguinte:

Tenho uma tabela que guarda mídias que são ser exibidas num sistema de multimídia

Ela é feita de union de varias outras tabelas.

Tem um campo chamado de Template que pode ser do tipo Vídeo, Tempo ou Noticia.

Geralmente tem mais noticias que os outros tipos de mídia o select que uso é esse:

INSERT INTO TAB_MEDIA (CD_GRADE, NM_GRADE,

CD_TEMPLATE, NM_TEMPLATE, URI_TEMPLATE,

FONTE_NOTICIA,DE_NOTICIA,

CONTEUDO, URI_NOTICIA,

DE_VIDEO, URI_VIDEO, CIDADE,

FRASE, [MIN], [MAX], UMIDADE,

MANHA, TARDE, NOITE, DIASEMANA, EXIBIDO)

(

SELECT CD_GRADE = G.CD_GRADE,

NM_GRADE = G.DE_GRADE,

CD_TEMPLATE = T.CD_TEMPLATE,

NM_TEMPLATE = T.DE_TEMPLATE,

URI_TEMPLATE = T.URI_TEMPLATE,

FONTE_NOTICIA = N.NM_NOTICIA,

DE_NOTICIA = NI.DE_NOTICIA,

CONTEUDO = NI.NM_FONTE,

URI_NOTICIA = NI.URI_NOTICIA,

DE_VIDEO = '---',

URI_VIDEO = '---',

CIDADE = '---',

FRASE = '---',

[MIN] = '---',

[MAX] = '---',

UMIDADE = '---',

MANHA = '---',

TARDE = '---',

NOITE = '---',

DIASEMANA = '---',

EXIBIDO = 0

FROM TAB_GRADE AS G,

TAB_TEMPLATE AS T,

TAB_NOTICIA AS N,

TAB_ITENS_NOTICIA AS NI

WHERE T.ID_GRADE = G.CD_GRADE

AND N.ID_TEMPLATE = T.CD_TEMPLATE

AND NI.ID_NOTICIA = N.CD_NOTICIA

UNION

SELECT CD_GRADE = G.CD_GRADE,

NM_GRADE = G.DE_GRADE,

CD_TEMPLATE = T.CD_TEMPLATE,

NM_TEMPLATE = T.DE_TEMPLATE,

URI_TEMPLATE = T.URI_TEMPLATE,

FONTE_NOTICIA = '---',

DE_NOTICIA = '---',

CONTEUDO = '---',

URI_NOTICIA = '---',

DE_VIDEO = V.DE_VIDEO,

URI_VIDEO = V.URI_VIDEO,

CIDADE = '---',

FRASE = '---',

[MIN] = '---',

[MAX] = '---',

UMIDADE = '---',

MANHA = '---',

TARDE = '---',

NOITE = '---',

DIASEMANA = '---',

EXIBIDO = 0

FROM TAB_GRADE AS G,

TAB_TEMPLATE AS T,

TAB_VIDEO AS V

WHERE T.ID_GRADE = G.CD_GRADE

AND V.ID_TEMPLATE = T.CD_TEMPLATE

UNION

SELECT CD_GRADE = G.CD_GRADE,

NM_GRADE = G.DE_GRADE,

CD_TEMPLATE = T.CD_TEMPLATE,

NM_TEMPLATE = T.DE_TEMPLATE,

URI_TEMPLATE = URI_TEMPLATE,

FONTE_NOTICIA = '---',

DE_NOTICIA = '---',

CONTEUDO = '---',

URI_NOTICIA = '---',

DE_VIDEO = '---',

URI_VIDEO = '---',

CIDADE = C.NM_CIDADE,

FRASE = IC.DE_FRASE,

[MIN] = IC.DE_MIN,

[MAX] = IC.DE_MAX,

UMIDADE = IC.DE_UMIDADE,

MANHA = IC.ICO_MANHA,

TARDE = IC.ICO_TARDE,

NOITE = IC.ICO_NOITE,

DIASEMANA = IC.DIASEMANA,

EXIBIDO = 0

FROM TAB_GRADE AS G,

TAB_TEMPLATE AS T,

TAB_CLIMA AS C,

TAB_ITENS_CLIMA AS IC

WHERE T.ID_GRADE = G.CD_GRADE

AND C.ID_TEMPLATE = T.CD_TEMPLATE

AND IC.ID_CLIMA = C.CD_CLIMA

)

 

Gostaria que na hora da inclusão fosse assim

Um Vídeo, duas Noticias e um clima.

Clima é vídeo poderia se repetir ate que todas as noticias fossem incluídas como faço isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O uso de TOP nas respectivas queries não resolve ?

 

INSERT INTO TAB_MEDIA (CD_GRADE, NM_GRADE,
CD_TEMPLATE, NM_TEMPLATE, URI_TEMPLATE,
FONTE_NOTICIA,DE_NOTICIA,
CONTEUDO, URI_NOTICIA,
DE_VIDEO, URI_VIDEO, CIDADE,
FRASE, [MIN], [MAX], UMIDADE,
MANHA, TARDE, NOITE, DIASEMANA, EXIBIDO)
(
SELECT CD_GRADE = G.CD_GRADE,
NM_GRADE = G.DE_GRADE,
CD_TEMPLATE = T.CD_TEMPLATE,
NM_TEMPLATE = T.DE_TEMPLATE,
URI_TEMPLATE = T.URI_TEMPLATE,
FONTE_NOTICIA = N.NM_NOTICIA,
DE_NOTICIA = NI.DE_NOTICIA,
CONTEUDO = NI.NM_FONTE,
URI_NOTICIA = NI.URI_NOTICIA,
DE_VIDEO = '---',
URI_VIDEO = '---',
CIDADE = '---',
FRASE = '---',
[MIN] = '---',
[MAX] = '---',
UMIDADE = '---',
MANHA = '---',
TARDE = '---',
NOITE = '---',
DIASEMANA = '---',
EXIBIDO = 0
FROM TAB_GRADE AS G,
TAB_TEMPLATE AS T,
TAB_NOTICIA AS N,
TAB_ITENS_NOTICIA AS NI
WHERE T.ID_GRADE = G.CD_GRADE
AND N.ID_TEMPLATE = T.CD_TEMPLATE
AND NI.ID_NOTICIA = N.CD_NOTICIA

top 2

UNION
SELECT CD_GRADE = G.CD_GRADE,
NM_GRADE = G.DE_GRADE,
CD_TEMPLATE = T.CD_TEMPLATE,
NM_TEMPLATE = T.DE_TEMPLATE,
URI_TEMPLATE = T.URI_TEMPLATE,
FONTE_NOTICIA = '---',
DE_NOTICIA = '---',
CONTEUDO = '---',
URI_NOTICIA = '---',
DE_VIDEO = V.DE_VIDEO,
URI_VIDEO = V.URI_VIDEO,
CIDADE = '---',
FRASE = '---',
[MIN] = '---',
[MAX] = '---',
UMIDADE = '---',
MANHA = '---',
TARDE = '---',
NOITE = '---',
DIASEMANA = '---',
EXIBIDO = 0
FROM TAB_GRADE AS G,
TAB_TEMPLATE AS T,
TAB_VIDEO AS V
WHERE T.ID_GRADE = G.CD_GRADE
AND V.ID_TEMPLATE = T.CD_TEMPLATE

top 1

UNION
SELECT CD_GRADE = G.CD_GRADE,
NM_GRADE = G.DE_GRADE,
CD_TEMPLATE = T.CD_TEMPLATE,
NM_TEMPLATE = T.DE_TEMPLATE,
URI_TEMPLATE = URI_TEMPLATE,
FONTE_NOTICIA = '---',
DE_NOTICIA = '---',
CONTEUDO = '---',
URI_NOTICIA = '---',
DE_VIDEO = '---',
URI_VIDEO = '---',
CIDADE = C.NM_CIDADE,
FRASE = IC.DE_FRASE,
[MIN] = IC.DE_MIN,
[MAX] = IC.DE_MAX,
UMIDADE = IC.DE_UMIDADE,
MANHA = IC.ICO_MANHA,
TARDE = IC.ICO_TARDE,
NOITE = IC.ICO_NOITE,
DIASEMANA = IC.DIASEMANA,
EXIBIDO = 0
FROM TAB_GRADE AS G,
TAB_TEMPLATE AS T,
TAB_CLIMA AS C,
TAB_ITENS_CLIMA AS IC
WHERE T.ID_GRADE = G.CD_GRADE
AND C.ID_TEMPLATE = T.CD_TEMPLATE
AND IC.ID_CLIMA = C.CD_CLIMA

top 1
)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na realidade foi só um palpite, não domino bem a síntaxe do SqlServer, mas creio que a solução deve passar perto disto que falei.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá's

Deu erro na syntax por causa da 'posição' do TOP, coloca o TOP depois do select, tipo:

 

SELECT TOP 2 * FROM tabela

Mas nao sei se te atende, por que tu vai precisar (por exemplo) criar um cursor, fazer um for ou coisa do tipo para alimentar o "valor do top".

 

se entendo bem oq você qr é

 

video
noticia
noticia
clima
video
noticia
noticia
clima
video
noticia
noticia
clima

Mais tarde dou uma olhada se tem algo mais simples e posto aqui se achar

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.