AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-82568

MSIS's questions

Martin Hope
MSIS
Asked: 2016-09-22 06:57:37 +0800 CST

Consulta MSSQL Server 2012 Precisamos de T-SQL para consulta com condição IF?

  • 2

Eu tenho um banco de dados com tabelas Student(StudId, StudName,...) e Grades (GradeExam1, GradeExam2,..) etc. E eu quero fazer uma consulta para atribuir uma nota de letra para cada nota. Estou pensando em fazer algo como:

SELECT StudId, GradeExam1 AS 'A' IF GradeExam1>= 90 AND GradeExam1 <=100
UNION
SELECT StudID, GradeExam1 AS 'B' ..........

Sei que posso usar aliases não condicionais no SQL simples, mas nunca fiz aliases condicionais em uma consulta SQL.

Ou talvez eu precise do T-SQL para fazer um loop para um determinado exame, em vez de fazer uma união de instruções select para diferentes condições?

Desde já, obrigado.

sql-server t-sql
  • 2 respostas
  • 304 Views
Martin Hope
MSIS
Asked: 2016-08-19 16:53:53 +0800 CST

O que estamos fazendo quando nos conectamos ao SQL Server?

  • 1

Peço desculpas se isso é simples ou fora do tópico deste site: eu só queria saber o que acontece em segundo plano quando alguém se conecta ao SQL Server, digamos, no Management Studio. A que estamos nos conectando, é uma máquina virtual ou algum servidor em algum lugar? Obrigado por quaisquer explicações, refs. etc.

sql-server
  • 2 respostas
  • 119 Views
Martin Hope
MSIS
Asked: 2016-08-18 12:22:23 +0800 CST

Consulta SQL Server 2012: Faturas com data mais antiga no estado para cada fornecedor

  • 0

tenho as tabelas:

  1. Faturas ( VendorID, InvoiceDate, InvoiceNumber, InvoiceTotal,...),
  2. Fornecedores (VendorName, VendorID,....)

Estou tentando obter uma lista das primeiras faturas de cada fornecedor, junto com VendorName, InvoiceNumber, InvoiceDate, InvoiceTotal(para a data mais antiga).

Aqui está o que eu tenho:

SELECT VendorName, InvoiceNumber, InvoiceDate, InvoiceTotal 
FROM Vendors V JOIN Invoices I ON V.VendorID=I.VendorID
WHERE  InvoiceDate   <= ( SELECT  Min(InvoiceDate) 
                          FROM Invoices 
                          JOIN Vendors ON V.VendorID=Vendors.VendorID  )
GROUP BY VendorName, InvoiceNumber, InvoiceDate, InvoiceTotal

O problema é que estou recebendo apenas uma fatura, que é a mais antiga de todas as faturas, não a mais antiga por estado. O que está acontecendo?

sql-server sql-server-2012
  • 3 respostas
  • 1919 Views
Martin Hope
MSIS
Asked: 2016-05-09 20:47:41 +0800 CST

Fornecedores com mais faturas no estado

  • 2

Tenho as tabelas Vendors(VendorName, VendorID,...) e Invoices(InvoiceID,...) e estou tentando encontrar fornecedores com mais notas fiscais em seus respectivos estados. Por favor, critique meu trabalho:

SELECT Max(NumInvoicesState)
FROM 
 (
   SELECT  VendorState,VendorName,
      Count(InvoiceID) AS NumInvoicesState 
   FROM VENDORS V 
   JOIN Invoices I
     on V.VendorID=I.VendorID
   GROUP by  VendorState, VendorName
 ) AS Alias

Minha ideia é primeiro fazer uma consulta para obter uma tabela com a lista de fornecedores por estado e a quantidade de notas fiscais de cada fornecedor.

Pensei em juntar a tabela interna a Vendors e depois agrupar por VendorState, mas isso não parece funcionar.

Acho que poderia SELECT VendorName, VendorState e depois juntá-lo com os fornecedores, digamos VendorState e, em seguida, agrupar por fornecedores. Mas então eu recebo todos os fornecedores, não apenas aqueles com o máximo.

sql-server sql-server-2012
  • 4 respostas
  • 1681 Views
Martin Hope
MSIS
Asked: 2016-05-08 19:02:48 +0800 CST

Sintaxe ao alterar string de retorno por concatenação?

  • 0

Criei com sucesso a função escalar FN_TotalBilled no SQL Server, que me dá o valor total faturado para uma empresa usando as tabelas Invoices(InvoiceID, InvoiceTotal,VendorID,..) e Vendors(VendorName, VendorID,.....), e eu posso fazer com que a função retorne um valor inteiro, MAS não consigo descobrir como fazer com que a função retorne um valor do tipo $Integer. Aqui está o que eu tenho:

CREATE FUNCTION Fn_TotalBilled (@VendorName VarChar (50) )
RETURNS Int 
BEGIN  RETURN (SELECT SUM(InvoiceTotal) FROM Invoices I join Vendors V
on I.VendorID=V.VendorID where VendorName = @VendorName ) ; END ;

Agora, posso obter um valor de retorno usando:

SELECT dbo.Fn_TotalBilled('CompanyName') , 

Que cospe um número inteiro.

MAS eu quero como retorno obter uma string $integer. Isto é o que estou tentando, que não está funcionando:

 Select '$'+ dbo.Fn_TotalBilled('IBM')

Recebo a mensagem de erro: "Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value '$' to data type int."

Eu então tentei:

Select CAST('$' AS Varchar) + dbo.Fn_TotalBilled('IBM')

Mas isso também não deu certo. Alguém pode me ajudar a obter uma string de retorno $dbo.Fn_TotallBilled? Também tentei alterar a função selecionando SELECT '$' + ...

O que mais eu posso fazer?

sql-server sql-server-2012
  • 3 respostas
  • 261 Views
Martin Hope
MSIS
Asked: 2016-05-07 19:15:43 +0800 CST

Subconsulta correlacionada para encontrar um total maior que a média do estado

  • 2

Tenho as tabelas Vendors (VendorName, VendorState,....) e Faturas (InvoiceID, InvoiceTotal,...). Desejo obter as faturas (como InvoiceId) maiores que o estado médio InvoiceTotal.

Eu sei que primeiro encontro o total médio por estado:

SELECT  VendorState, Avg(InvoiceTotal) AS AvgStateInvoice
from Invoices I join Vendors V on V.VendorID= I.VendorID 
group by VendorState

Portanto, agora tenho a lista de InvoiceTotal médio por estado. Agora preciso descobrir:

Como fazer uma consulta externa para selecionar aquelas notas fiscais maiores que a média do estado e é aqui que me perco, pois não lembro a sintaxe para fazer a comparação. Acho que seria algo do tipo:

SELECT InvoiceId from Invoices where InvoiceTotal > .....?

Alguma ideia, por favor?

sql-server sql-server-2012
  • 2 respostas
  • 701 Views
Martin Hope
MSIS
Asked: 2016-05-04 09:42:42 +0800 CST

Testar se uma string é um palíndromo usando T-SQL

  • 24

Sou iniciante em T-SQL. Quero decidir se uma string de entrada é um palíndromo, com saída = 0 se não for e saída = 1 se for. Ainda estou descobrindo a sintaxe. Não estou nem recebendo uma mensagem de erro. Estou procurando soluções diferentes e algum feedback, para obter uma melhor compreensão e conhecimento de como o T-SQL funciona, para me tornar melhor nisso - ainda sou um estudante.

A ideia-chave, a meu ver, é comparar os caracteres mais à esquerda e à direita entre si, para verificar a igualdade e, em seguida, comparar o segundo caractere da esquerda com o 2º do último, etc. Fazemos um loop: Se os personagens forem iguais entre si, continuamos. Se chegarmos ao fim, produzimos 1, caso contrário, produzimos 0.

Você poderia criticar:

CREATE function Palindrome(
    @String  Char
    , @StringLength  Int
    , @n Int
    , @Palindrome BIN
    , @StringLeftLength  Int
)
RETURNS Binary
AS
BEGIN
SET @ n=1
SET @StringLength= Len(String)

  WHILE @StringLength - @n >1

  IF
  Left(String,@n)=Right(String, @StringLength)

 SET @n =n+1
 SET @StringLength =StringLength -1

 RETURN @Binary =1

 ELSE RETURN @Palindrome =0

END

Acho que estou no caminho certo, mas ainda estou muito longe. Alguma ideia?

sql-server sql-server-2012
  • 9 respostas
  • 8134 Views
Martin Hope
MSIS
Asked: 2016-03-05 22:45:46 +0800 CST

Subconsulta correlacionada no SQL Server 2014

  • 4

Estou executando uma subconsulta correlacionada para saber a listagem de fornecedores (pelo Vendor Name) que estão em diferentes cidades, estados, ou seja, queremos saber os fornecedores que não possuem cidade e estado em comum com outros fornecedores. Parecia que uma autojunção era a coisa certa a fazer.

Apenas dicas, se possível, por favor.

A tabela de fornecedores é:

Vendors(VendorID P, VendorCity, VendorState, VendorName,...)

Isto é o que eu tenho:

Select VendorName, VendorCity, VendorState from Vendors AS V1 where
         VendorCity, VendorState NOT IN (Select VendorCity, VendorState FROM
          Vendors AS V2 where V2.VendorID <> V1.VendorID)

Esta é a mensagem de erro que recebo:

Msg 4145, Nível 15, Estado 1, Linha 2 Uma expressão de tipo não booleano especificada em um contexto onde uma condição é esperada, próximo a ','.

Não vejo por que há uma referência a tipos booleanos, já que não é um EXISTS ou outra consulta relacionada.

sql-server subquery
  • 3 respostas
  • 406 Views
Martin Hope
MSIS
Asked: 2016-03-01 22:23:06 +0800 CST

Subconsulta correlacionada SQL Server 2014

  • 7

Estou (sem sucesso) usando uma subconsulta correlacionada em uma tabela de faturas:

Invoices(InvoiceID,  VendorID, InvoiceTotal, PaymentTotal, CreditTotal,.... ),

para encontrar a soma das maiores faturas não pagas de todos os fornecedores, onde a condição não paga é dada por InvoiceTotal-PaymentTotal-CreditTotal <0:

 Select Sum(LargestUnpaid) from 
 (Select   Max(InvoiceTotal) AS LargestUnpaid from Invoices 
  where InvoiceTotal-(PaymentTotal+CreditTotal)<0 group by vendorID ) ;

A consulta interna é executada, o que é bom e ruim, já que a consulta deve ser correlacionada, mas a consulta como um todo não é executada e recebo a mensagem de erro:

Msg 102, Level 15, State 1, Line 4 Incorrect syntax near ')'.

O que estou fazendo errado?

sql-server subquery
  • 2 respostas
  • 343 Views
Martin Hope
MSIS
Asked: 2016-02-20 13:56:19 +0800 CST

Motivação de consulta para junções cruzadas

  • 2

Digamos que temos duas tabelas 'Fornecedores' e 'Faturas'. Entendo que um motivo para fazer uma junção à esquerda de 'Fornecedores' com 'Faturas' ao longo da coluna VendorID é obter informações sobre fornecedores sem faturas. Uma junção à direita é basicamente uma junção à esquerda com tabelas trocadas (essa é a principal motivação, certo)?

Mas não consigo ver uma motivação geral de cross joins nesse sentido, ou seja, se eu receber tabelas Vendors, Invoices unidas ao longo VendorID como acima, que informação é que Vendors Cross Join me permite obter que não posso obter através de uma junção esquerda , ou então?

Obrigado.

sql-server join
  • 2 respostas
  • 133 Views
Martin Hope
MSIS
Asked: 2016-02-16 21:00:29 +0800 CST

Consulta confusa: misturando agregados e não agregados

  • 5

Espero que alguém possa esclarecer como fazer essa consulta no SQL Server 2012, ou talvez o que está pedindo; parece que estou sendo solicitado a fazer uma consulta que combina agregados com não agregados, levando ao que parece ser uma consulta impossível, já que só se pode agrupar por campos que aparecem na Selectcláusula, o que atrapalha a consulta.

Me pedem para fazer uma consulta na tabela Invoices:

Invoices (InvoiceID, VendorID,InvoiceDate, InvoiceTotal,...)

Sou solicitado a fazer uma consulta que produz 6 colunas: 3 colunas já aparecem "como estão" na tabela:VendorID, InvoiceDate, InvoiceTotal

E outras 3 colunas são agregadas:

4) Sum(InvoiceTotal) AS VendorTotal: Soma das faturas de cadaVendorID

5) Count(InvoiceID) AS VendorCount: Contagem de Faturas para cadaVendorId

6) Avg(InvoiceTotal) AS VendorAvg: Média de Faturas porVendorId


Agora, o problema é que não se pode combinar na mesma consulta (com exceções que não posso usar aqui) agregados e não agregados, a menos que se agrupe pelos não agregados. Então eu posso fazer:

Select 
    VendorId, InvoiceDate, InvoiceTotal, 
    Sum(InvoiceTotal) AS VendorTotal, 
    Count(InvoiceId) AS VendorCount, 
    Avg(InvoiceTotal) AS VendorAvg 
GROUP BY
    VendorID 

Agora, não tenho problemas se eu apenas group by VendorID. Mas, para obter uma consulta válida, se eu selecionar um InvoiceDateou InvoiceTotal-- ambos não agregados -- devo agrupar por cada um deles para obter uma consulta válida.

Mas agrupar por esses dois últimos basicamente desfaz os outros agregados: Se eu agrupar por data de faturamento, perco a agregação por Fornecedor, pois cada fornecedor tem datas de faturamento diferentes.

Eu tentei fazer junções automáticas, usando Invoices AS I1 join Invoices AS I2 e fazendo agregações I1e não agregações em I2, mas isso parece não funcionar.

Estou perdendo algo óbvio aqui? Alguma ideia?

Edit: A resposta foi encontrada usando OVER (PARTITION BY VendorId), assim:

Select 
VendorId, InvoiceDate, InvoiceTotal, 
    Sum(InvoiceTotal) OVER (PARTITION BY VendorId) AS VendorTotal, 
    Count(InvoiceId) OVER (PARTITION BY VendorId) AS VendorCount, 
    Avg(InvoiceTotal) OVER (PARTITION BY VendorId) AS VendorAvg 
GROUP BY
    VendorID 
sql-server sql-server-2012
  • 2 respostas
  • 3201 Views
Martin Hope
MSIS
Asked: 2016-01-17 00:57:41 +0800 CST

Consulta na tabela de ponte

  • 2

Tenho três tabelas que tratam de livros: Authors, Titlesde livros escritos e uma tabela de bridge TitleAuthor, da qual estou tentando encontrar todos os livros ( Titles) com mais de um autor . Estas são as tabelas:

Authors (Au_Id  PK, Au_fname, Au_lname, ...)

Titles (Title_Id PK, Title, Title_type, ...)

TitleAuthor (Au_Id PK, Title_Id PK, Au_order, ...)

Em TitleAuthor, não tenho certeza do que Au_ordersignifica, mas suspeito que seja a ordem em que o nome de um autor é citado em um livro com mais de um autor. Au_orderé um TinyInttipo de dados, btw. Essas consultas devem ser introdutórias, ou seja, sem junções ou subconsultas sofisticadas.

Isto é o que eu tentei:

1)

Select Au_Id from `TitleAuthor` where  Count(Auth_id)>1;

Mas isso nos dá o nome do autor, não o nome do livro (lembre-se: consulta de introdução)

2) Descobrir quais livros/títulos são mencionados mais de uma vez em TitleAuthor:

Select Title_id from Title-Author where Count(Title_Id)>1;

Isso não me dá resultados por algum motivo, embora também não haja mensagens de erro. Suspeito que precise agrupar e ter, mas isso também não está funcionando.

Alguma ideia?

sql-server aggregate
  • 2 respostas
  • 4148 Views
Martin Hope
MSIS
Asked: 2015-12-19 12:35:15 +0800 CST

Consulta NOT IN (juntamente com join)

  • 4

Eu tenho duas tabelas : Part, OrderLine:

Part (PartNum PK, PartDesc, Price)

OrderLine (OrderNum PK, PartNum PK, QtyOrdered)

E eu quero descobrir as peças que não foram encomendadas. Acho que tenho uma boa ideia, mas posso estar perdendo alguma coisa; Eu acho que provavelmente na sintaxe. Por favor, verifique:

select Part.PartNum
    ,OrderLine.OrderNum
from OrderLine
inner join Part on OrderLine.PartNum = Part.PartNum
where PartNum not in (
        select distinct (OrderNum)
        from OrderLine
        )

Isso está correto?

sql-server t-sql
  • 1 respostas
  • 101 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve