Answered PIVOT nao é suportado no vb.net

Todas as Respostas

  • quarta-feira, 25 de abril de 2012 20:56
     
     

    pessoal alguém me ajuda neste assunto?

    por favor


    Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com

  • quarta-feira, 25 de abril de 2012 21:14
     
     

    A query esta direto no controle?

    tenta colocar numa procedure e associar a saida da procedure ao controle...

  • quarta-feira, 25 de abril de 2012 21:23
     
     

    Essa query está no dataset que vai ser usado para fazer um relatório no report viewer.

    O que estou a tentar fazer é arranjar uma solução para não ter que usar o pivot, visto que o vb.net não aceita o pivot.

    Entendeu? Acha que existe alternativa no uso do pivot nesse código?

    Obrigado pela resposta


    Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com


  • quarta-feira, 25 de abril de 2012 22:03
     
     

    Todo nosso sistema é baseado em procedures.

    Nao colocamos querys em controles. Temos procedures ate para as querys mais simples.

    E os controles do vb.net sao associados as procedures.

    Temos varias procedures com comandos com pivot.

    Nao ha qualquer problema em usar estas procedures no vb.net.

  • quarta-feira, 25 de abril de 2012 22:07
     
      Contém Código

    E como transformo o meu código em procedures?

    Mas percebeu onde estou a tentar usar esse código? 

    Obrigado

    WITH CTE AS(
     SELECT DISTINCT SUBSTRING(nome, 0, 5) AS nome,       
            RIGHT(nome,LEN(nome)-12) as Equipa 
     FROM actividades)
     
     
     -- TESTE PIVOT
    SELECT	NOME,
    		CASE WHEN [A] = 1 THEN
    			'SIM' END AS [EQUIPA A],
    		CASE WHEN [B] = 1 THEN
    			'SIM' END AS [EQUIPA B],
    		CASE WHEN [C] = 1 THEN
    			'SIM' END AS [EQUIPA C],
    		CASE WHEN [F] = 1 THEN
    			'SIM' END AS [EQUIPA F]
    FROM
    (SELECT nome, Equipa
        FROM CTE) AS SourceTable
    PIVOT
    (
    COUNT(Equipa)
    FOR Equipa IN ([A],[B],[C],[F])
    ) AS PivotTable1


    Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com

  • quarta-feira, 25 de abril de 2012 22:12
     
     

    Para transformar em procedure basta colocar um:

    Create procedure dbo.nomeprocedure

    @parametro tipo,

    @parametro tipo

    as

    seu codigo aqui

    ------------------------------------------------

    A procedure voce cria no Management Studio. É melhor.

    Nao tenho programado em VB nos ultimos anos e nao tenho como lhe ajudar na associacao do controle a procedure.

  • quarta-feira, 25 de abril de 2012 22:24
     
     

    Este código é uma consulta.

    O objectivo deste código era usa-lo num relatório do vb.net.

    Para depois na construção do relatório fosse usar as colunas criadas durante a consulta.

    Se calhar o que vou ter que fazer é alterar o código sql para não ter problemas no vb.net.

    Acha que é possivel?

    obrigado


    Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com

  • quarta-feira, 25 de abril de 2012 23:14
     
     

    Se fizer como te falei, a procedure funcionara como uma consulta.

    A saida da procedure sera um resultset identico a query que voce postou acima.

    Mas ao inves de colocar a query no controle, voce coloca a procedure.

    Faça um teste.

  • quarta-feira, 25 de abril de 2012 23:18
     
      Contém Código

    então no dataset do vb.net ia por o seguinte código:

    Certo?

    Create procedure dbo.teste

    @parametro nome,

    @parametro equipa

    @parametro A

    @parametro B

    @parametro C

    @parametro F

    as

    WITH CTE AS( SELECT DISTINCT SUBSTRING(nome, 0, 5) AS nome, RIGHT(nome,LEN(nome)-12) as Equipa FROM actividades) -- TESTE PIVOT SELECT NOME, CASE WHEN [A] = 1 THEN 'SIM' END AS [EQUIPA A], CASE WHEN [B] = 1 THEN 'SIM' END AS [EQUIPA B], CASE WHEN [C] = 1 THEN 'SIM' END AS [EQUIPA C], CASE WHEN [F] = 1 THEN 'SIM' END AS [EQUIPA F] FROM (SELECT nome, Equipa FROM CTE) AS SourceTable PIVOT ( COUNT(Equipa) FOR Equipa IN ([A],[B],[C],[F]) ) AS PivotTable1



    Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com

  • quarta-feira, 25 de abril de 2012 23:36
     
     

    Nao.

    Voce cria a procedure no banco. Eu crio procedures pelo Manegement Studio do SQL Server 2008.

    Apos a procedure ser criada e estar funcionando, voce associa a procedure ao controle. Mas nisto eu nao posso te ajudar. Nao programo em VB.Net.

    A procedure é quase isto que voce colocou ai em cima, mas acho que voce nao precisa dos parametros

    Create procedure dbo.teste

    as

    WITH CTE AS(....

  • quarta-feira, 25 de abril de 2012 23:42
     
     

    Mas não está a dar. E não sei associar esses procedure ao vb.net

    Ceilton você pode-me ajudar a alterar o código? Alterar o código sql ser ter que utilizar o pivot?

    Pois é o pivot que me está a dar problemas. Se arrnjar uma alternativa ao pivot beleza. Acha que é possivel?

    Obrigado


    Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com

  • quinta-feira, 26 de abril de 2012 08:55
     
      Contém Código

    ola

    Preciso da vossa ajuda

    Depois de muito googlar não consigo usar o comando pivot no vb.net.

    Preciso de alterar o meu código de maneira a não ter que usar o pivot. só assim é que o vou conseguir usar no vb.net.

    O código é uma query que faz a pesquisa pelos nomes se estes terminarem em A,B,C ou F ele escreve o nome e na coluna da respectiva letra escreve sim.

    O código é este:

    Agradeço a vossa ajuda, estou mesmo a precisar de resolver este assunto. Conto com voces.

    Obrigado

    WITH CTE AS(
     SELECT DISTINCT SUBSTRING(nome, 0, 5) AS nome,       
            RIGHT(nome,LEN(nome)-12) as Equipa 
     FROM actividades)
     
     
     -- TESTE PIVOT
    SELECT	NOME,
    		CASE WHEN [A] = 1 THEN
    			'SIM' END AS [EQUIPA A],
    		CASE WHEN [B] = 1 THEN
    			'SIM' END AS [EQUIPA B],
    		CASE WHEN [C] = 1 THEN
    			'SIM' END AS [EQUIPA C],
    		CASE WHEN [F] = 1 THEN
    			'SIM' END AS [EQUIPA F]
    FROM
    (SELECT nome, Equipa
        FROM CTE) AS SourceTable
    PIVOT
    (
    COUNT(Equipa)
    FOR Equipa IN ([A],


    Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com

  • quinta-feira, 26 de abril de 2012 12:07
     
      Contém Código

    Bom dia Jonas,

    Veja um exemplo de como simular o pivot sem utilizar o comando pivot.

    WITH CTE AS(
     SELECT DISTINCT SUBSTRING(nome, 0, 5) AS nome,       
            RIGHT(nome,LEN(nome)-12) as Equipa 
     FROM actividades)
     
    -- PIVOT SQL SERVER 2000
    SELECT	NOME,
    		[EQUIPA A] = REPLACE(1,COUNT( CASE WHEN Equipa = 'A' THEN EQUIPA END),'SIM'),
    		[EQUIPA B] = REPLACE(1,COUNT( CASE WHEN Equipa = 'B' THEN EQUIPA END),'SIM'),
    		[EQUIPA C] = REPLACE(1,COUNT( CASE WHEN Equipa = 'C' THEN EQUIPA END),'SIM'),
    		[EQUIPA D] = REPLACE(1,COUNT( CASE WHEN Equipa = 'F' THEN EQUIPA END),'SIM')
    		
    FROM CTE
    GROUP BY NOME
    

    Adriano

    Adriano Nascimento

  • quinta-feira, 26 de abril de 2012 12:17
     
     

    Bom dia Jonas,

    Este post esta duplicado.

    Veja o link http://social.msdn.microsoft.com/Forums/pt-BR/520/thread/4b9478a7-2323-4498-bee0-52f90ddbed85

    Se possivel exclua um para facilitar na ajuda dos amigos do forum.

    Adriano Nascimento


    Adriano Nascimento

  • quinta-feira, 26 de abril de 2012 13:09
     
     

    Adriano funcionou :)

    Falta é um pormenor.

    No caso do não ter equipa ele escreve "1". COmo faço para se caso não tiver equipa ele escrever nulo?

    Tive a tentar mudar mas sem resultado

    Obrigado


    Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com

  • quinta-feira, 26 de abril de 2012 13:22
     
     Respondido Contém Código

    Ops, foi mal, errei no Replace.

    Veja se o exemplo abaixo te ajuda.

    WITH CTE AS(
     SELECT DISTINCT SUBSTRING(nome, 0, 5) AS nome,       
            RIGHT(nome,LEN(nome)-12) as Equipa 
     FROM actividades)
     
    -- PIVOT SQL SERVER 2000
    SELECT	NOME,
    		[EQUIPA A] = CASE WHEN COUNT( CASE WHEN Equipa = 'A' THEN EQUIPA END) = 1 THEN 'SIM' ELSE NULL END,
    		[EQUIPA B] = CASE WHEN COUNT( CASE WHEN Equipa = 'B' THEN EQUIPA END) = 1 THEN 'SIM' ELSE NULL END,
    		[EQUIPA C] = CASE WHEN COUNT( CASE WHEN Equipa = 'C' THEN EQUIPA END) = 1 THEN 'SIM' ELSE NULL END,
    		[EQUIPA D] = CASE WHEN COUNT( CASE WHEN Equipa = 'D' THEN EQUIPA END) = 1 THEN 'SIM' ELSE NULL END,
    		[EQUIPA F] = CASE WHEN COUNT( CASE WHEN Equipa = 'F' THEN EQUIPA END) = 1 THEN 'SIM' ELSE NULL END
    		
    FROM CTE
    GROUP BY NOME

    Adriano Nascimento

    Adriano Nascimento

    • Marcado como Resposta Jonas São Paulo quinta-feira, 26 de abril de 2012 13:43
    •  
  • quinta-feira, 26 de abril de 2012 13:44
     
     

    Adriano resultou :)

    Muito Obrigado

    Adoro voce :)

    Com todo a compostura, claro :)


    Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com