locked
SELECT.. UNION... ORDER BY NEWID() RRS feed

  • Pergunta

  • Prezados, bom dia..

    Tenho a seguinte query

    SELECT Url, Loja
    FROM Lojas
    WHERE Cliente = 2

    UNION

    SELECT Url, Loja
    FROM Lojas
    WHERE Cliente <> 2
    ORDER BY NEWID()

    Só que não está funcionando.. e eu gostaria de receber os resultados bem assim:

    www.loja1.com.br   |   Loja 1          -- esta loja sempre em primeiro lugar
    www.loja5.com.br   |   Loja 5          -- daqui pra baixo, tudo desorganizado ( ORDER BY NEWID() )
    www.loja3.com.br   |   Loja 3
    www.loja4.com.br   |   Loja 4
    www.loja2.com.br   |   Loja 2

    Se alguém puder me ajudar a montar esta query, agradeço.
    Obrigado

    sexta-feira, 25 de agosto de 2006 13:08

Respostas

  • veja se assim funciona

     


     Create table #exemplo (campo int, cliente int)

    insert into  #exemplo (campo, cliente) Values (1,1)
    insert into  #exemplo (campo, cliente) Values (2,1)
    insert into  #exemplo (campo, cliente) Values (3,1)
    insert into  #exemplo (campo, cliente) Values (1,2)


    Declare @Tabela Table (idx int identity(1,1), campo int, cliente int)
    Insert into @tabela (campo, cliente) select campo, cliente From #Exemplo where cliente=2
    Insert into @tabela (campo, cliente) select campo, cliente From #Exemplo where cliente=1 order by newID()

    Select * From @Tabela Order By Idx

     

    depois da para colocar essa consulta em uma funcao que retorne uma table assim vc. pode usar como se fosse uma view, so que sem a possibilidade de inclusao.

     

    Abs;

    sexta-feira, 25 de agosto de 2006 14:00

Todas as Respostas

  • tente assim

    Select * From (

    SELECT Url, Loja
    FROM Lojas
    WHERE Cliente = 2

    UNION

    SELECT Url, Loja
    FROM Lojas
    WHERE Cliente <> 2) Tbl order by newid()

    Abs.

    sexta-feira, 25 de agosto de 2006 13:36
  • Marcelo, continua ordenando tudo pelo newid()

    Eu gostaria que o cliente 2 sempre aparecesse na primeira linha ,e somente o restante aparecesse ordenado pelo newid()

    Há essa possibilidade?
    Obrigado

    sexta-feira, 25 de agosto de 2006 13:51
  • veja se assim funciona

     


     Create table #exemplo (campo int, cliente int)

    insert into  #exemplo (campo, cliente) Values (1,1)
    insert into  #exemplo (campo, cliente) Values (2,1)
    insert into  #exemplo (campo, cliente) Values (3,1)
    insert into  #exemplo (campo, cliente) Values (1,2)


    Declare @Tabela Table (idx int identity(1,1), campo int, cliente int)
    Insert into @tabela (campo, cliente) select campo, cliente From #Exemplo where cliente=2
    Insert into @tabela (campo, cliente) select campo, cliente From #Exemplo where cliente=1 order by newID()

    Select * From @Tabela Order By Idx

     

    depois da para colocar essa consulta em uma funcao que retorne uma table assim vc. pode usar como se fosse uma view, so que sem a possibilidade de inclusao.

     

    Abs;

    sexta-feira, 25 de agosto de 2006 14:00
  • Tenta assim:

    select Url, Loja
    from (
        select top 1 Url, Loja
        from Lojas
        where Cliente = 2 ) as d
    union all
    select Url, Loja
    from (
        select top 500 Url, Loja
        from Lojas
    where Cliente <> 2
        order by newid() ) as d


    /* Na 2ª subselect, sempre coloque um número maior do que existe na coluna, eu - como exemplo - coloquei 500.
    Já fiz o teste aqui e deu certo, você retorna sempre na 1ª linha as colunas onde Lojas.Cliente = 2 e nas demais ele retorna os diferentes aleatóriamente! */
    segunda-feira, 12 de janeiro de 2009 17:03