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-114915

SQLserving's questions

Martin Hope
SQLserving
Asked: 2020-11-19 10:02:55 +0800 CST

CTE recursivo com partição

  • 0

Eu tenho uma tabela assim no MS SQL SERVER 2014:

ID|Race|Lap  
1 |21  |11  
2 |21  |NULL
3 |21  |NULL  
4 |21  |NULL  
5 |29  |65  
6 |29  |NULL  
7 |29  |NULL  
8 |29  |NULL 

Estou tentando preencher a coluna Lap adicionando 1 a ela com base no primeiro valor. A partição é baseada na coluna Race. Algo assim seria o resultado final:

ID|Race|Lap  
1 |21  |11  
2 |21  |12
3 |21  |13  
4 |21  |14  
5 |29  |65  
6 |29  |66  
7 |29  |67  
8 |29  |68  

Pode haver outras maneiras de fazer isso, mas prefiro ficar com o CTE recursivo. Há alguma maneira de fazer isso?

sql-server recursive
  • 3 respostas
  • 315 Views
Martin Hope
SQLserving
Asked: 2020-05-07 07:22:41 +0800 CST

Carregar vários arquivos no SQL Server sem acesso à Caixa do Servidor

  • 0

Estou tentando criar um processo que faria upload em massa de vários arquivos csv periodicamente para tabelas individuais no servidor SQL. O problema que estou tendo é que esses arquivos não estão localizados no mesmo servidor.

Posso usar o comando de upload em massa para fazer upload de arquivos de uma pasta na caixa do servidor SQL, mas não de nossa unidade compartilhada, localizada em um servidor diferente. Existem várias pessoas que estariam executando esse processo e, portanto, pode não ser viável, porque nem todas elas obteriam esse tipo de acesso à caixa do servidor SQL.

Existe alguma maneira de fazer isso com o mesmo nível de eficiência e rapidez?
Eu pensei em enviar cada linha nos arquivos csv, mas esses arquivos são enormes e levariam muito tempo
. Apenas procurando idéias para fazer isso funcionar.
O SSIS seria menos ou mais ou igualmente eficiente?

ssis sql-server-2014
  • 1 respostas
  • 138 Views
Martin Hope
SQLserving
Asked: 2019-10-09 09:37:18 +0800 CST

Limites de milhas divididos ao milésimo com base no ID

  • 5

Eu tenho uma tabela assim no sql server 2014:

ID | Start_mile|End_mile  
1  |5.23       |7.464  
2  |2.333      |6.124 

O que eu quero fazer é dividir as milhas em milésimos por ID assim:

ID |start_mile|end_mile  
1  |5.230     |5.231  
1  |5.231     |5.232  
1  |5.232     |5.233  
....  
1  |7.463     |7.464  
...

Alguma ideia de como fazer isso? Estou tentando ficar longe dos cursores, a menos que essa seja a única maneira de fazer isso.

Consegui reunir essa consulta, mas não tenho certeza de como incorporá-la ao ID e aos limites de milhas que tenho para que ela seja executada em toda a tabela sem as variáveis ​​De e Para declaradas:

DECLARE @from decimal(15, 3) = 0.980;  
DECLARE @to decimal(15, 3) = 1.024;  

;WITH cte AS  
    (SELECT @from AS Value  
     UNION ALL  
     SELECT CONVERT(decimal(15, 3), Value + 0.001)  
     FROM cte  
     WHERE Value < @to)  
SELECT *  
FROM cte  
option (maxrecursion 0) 
sql-server
  • 3 respostas
  • 376 Views
Martin Hope
SQLserving
Asked: 2019-05-09 07:13:42 +0800 CST

Sobreposições e agrupamento de lacunas no SQL Server

  • 1

Estou tentando encontrar lacunas nos meus dados e agrupá-las. A tabela com a qual estou trabalhando é assim:

runid|year |road|start   |end     
01010|  9  |2   |0.000   |0.585    
01100|  9  |2   |0.585   |4.980    
01100|  9  |2   |4.980   |7.777  
01100|  9  |2   |7.777   |11.857   
01100|  9  |2   |11.857  |13.274   
01100|  9  |2   |15.235  |21.021  
01100|  9  |2   |21.021  |25.333  
01100|  9  |3   |0.000   |7.777  
01100|  9  |3   |7.777   |13.274  
01100|  9  |3   |13.274  |25.333 
...

Eu quero poder criar uma nova coluna que identifique o grupo assim:

runid|year |road|start   |end    |rn    
01010|  9  |2   |0.000   |0.585  |1  
01100|  9  |2   |0.585   |4.980  |1  
01100|  9  |2   |4.980   |7.777  |1
01100|  9  |2   |7.777   |11.857 |1  
01100|  9  |2   |11.857  |13.274 |1  
01100|  9  |2   |15.235  |21.021 |2
01100|  9  |2   |21.021  |25.333 |2 
01100|  9  |3   |0.000   |7.777  |1
01100|  9  |3   |7.777   |13.274 |1 
01100|  9  |3   |13.274  |25.333 |1  
...  

Como você pode ver, o início e o fim estão sincronizados para alguma parte dos dados e, em seguida, há uma lacuna entre 13.274 e 15.235, que é onde você alterna a nova coluna (rn)
Nota: A tabela é um instantâneo da tabela grande com vários runid, anos, estradas e pontos de início e fim relevantes

Eu fiz algo assim até agora:

with cte as (  
select distinct runid,year,road,start,end, LAG(end) over (partition by runid,year,road order by start) rn from dbo.runners
)
select *,CASE WHEN rn <> start then 1 when rn is null then 2 else 0 end chk from cte order by runid,year,road,start   

Isso me dá isso:

runid|year |road|start   |end    |rn    |chk   
01010|  9  |2   |0.000   |0.585  |NULL  |2  
01100|  9  |2   |0.585   |4.980  |0.585 |0  
01100|  9  |2   |4.980   |7.777  |4.980 |0  
01100|  9  |2   |7.777   |11.857 |7.777 |0  
01100|  9  |2   |11.857  |13.274 |11.857|0    
01100|  9  |2   |15.235  |21.021 |13.274|1  
01100|  9  |2   |21.021  |25.333 |21.021|0   
01100|  9  |3   |0.000   |7.777  |NULL  |2  
01100|  9  |3   |7.777   |13.274 |7.777 |0  
01100|  9  |3   |13.274  |25.333 |13.274|0    
... 

Não tenho certeza de como obter mais como uma coluna RANK para cada grupo nas minhas partições.

Link do teste aqui

sql-server sql-server-2014
  • 1 respostas
  • 176 Views
Martin Hope
SQLserving
Asked: 2018-12-08 12:47:44 +0800 CST

Correspondência de datas com condições e filtragem em uma tabela

  • 1

Então eu tenho uma tabela assim

id | date1   |date2   |value  
1  | 1/1/2014|1/1/2004|100  
1  | 1/1/2014|1/1/2004|100  
1  | 1/1/2014|1/1/2009|200  
1  | 1/1/2014|1/1/2009|200   
1  | 1/1/2014|1/1/2016|300  
1  | 1/1/2015|1/1/2004|100  
1  | 1/1/2015|1/1/2004|100  
1  | 1/1/2015|1/1/2009|200   
1  | 1/1/2015|1/1/2009|200    
1  | 1/1/2015|1/1/2016|300   
1  | 1/1/2017|1/1/2004|100  
1  | 1/1/2017|1/1/2004|100  
1  | 1/1/2017|1/1/2009|200  
1  | 1/1/2017|1/1/2009|200   
1  | 1/1/2017|1/1/2016|300 

NOTA: Os valores de valor col podem ser aleatórios

Como obtenho as linhas com date1>=date2 em vários ids.

Essencialmente, se date1 for 2014, quero obter apenas a linha em que date1-date2 é mínimo, mas não negativo.

O resultado da tabela de exemplo ficaria assim:

id | date1   |date2   |value  
1  | 1/1/2014|1/1/2009|200  
1  | 1/1/2015|1/1/2009|200  
1  | 1/1/2017|1/1/2016|300

Espero ter explicado bem, se não, fique a vontade para perguntar.

Estou usando o MS SQL SERVER 2014

até agora tentei:

select id,date1,min(date2) over (partition by id,date1 order by id, date1) date2, value   
from tblA

Isso me dá:

id | date1   |date2   |value  
1  | 1/1/2014|1/1/2004|100  
1  | 1/1/2014|1/1/2004|100  
1  | 1/1/2014|1/1/2004|200  
1  | 1/1/2014|1/1/2004|200   
1  | 1/1/2014|1/1/2004|300  
1  | 1/1/2015|1/1/2004|100  
1  | 1/1/2015|1/1/2004|100  
1  | 1/1/2015|1/1/2004|200   
1  | 1/1/2015|1/1/2004|200    
1  | 1/1/2015|1/1/2004|300   
1  | 1/1/2017|1/1/2004|100  
1  | 1/1/2017|1/1/2004|100  
1  | 1/1/2017|1/1/2004|200  
1  | 1/1/2017|1/1/2004|200   
1  | 1/1/2017|1/1/2004|300 

Aqui está um link para mexer com a mesa

sql-server t-sql
  • 1 respostas
  • 68 Views
Martin Hope
SQLserving
Asked: 2018-07-13 05:33:22 +0800 CST

Obtendo dois ou mais valores de coluna por meio de um cursor SQL Server

  • 0

Eu tenho duas tabelas assim:
Table Experiment (vou usar apenas um roadID (rID) por enquanto)

rID | latBegin |longBegin |latEnd   |longEnd  
041 | 23.875464|-80.456798|30.549879|-83.5465521  
041 | 33.776563|-81.157526|33.248261|-81.2468425 

Para cada uma das linhas acima, quero que o cursor obtenha o rID, latBegin, longBegin e verifique a distância do lat e do long em
Table ExperimentDetails

rID | lat      |long      |temp |direction|tension    
041 | 33.665632|-81.137952|56.23|L        |54.54      
041 | 23.245632|-80.127952|56.23|L        |23.54  
041 | 23.454555|-80.232456|66.23|L        |13.54  
041 | 23.568763|-80.346586|26.23|L        |63.54  
041 | 23.796545|-80.446586|86.23|L        |83.54   
041 | 23.996545|-80.946586|96.23|L        |22.54   

As etapas para a consulta são:
Etapa 1: Obtenha latBegin e longBegin para um rID específico da Tabela Experimento
Etapa 2: Vá para ExperimentDetails e execute este cálculo para obter a diferença de distância para cada lat e long na tabela Details

Round(Sqrt(POWER((Abs(lat - @latBegin)),2) + POWER((Abs(long - @longBegin)),2)) * 3958.73926185, 4) * 1000  

Etapa 3: obter o valor mínimo para esta nova coluna associada na tabela de detalhes
Etapa 4: obter os valores associados de temperatura, direção e tensão para esse valor mínimo e colocá-lo em uma nova tabela (ainda não concluída> ajuda necessária)
Etapa 5: Obtenha a média de temp, tensão para os 30 pés ou 360 polegadas anteriores do valor mínimo e coloque-o em outra tabela (colunas: rID, latBegin,longBegin,avgTension,avgtemp Ainda não concluído>Ajuda necessária)

Este é o meu código até agora:

      DECLARE @rID int,@latBegin decimal(15,10),@longBegin decimal(15,10),@minV decimal(15,10),@temp decimal(15,10)

    DECLARE MY_CURSOR CURSOR   
      LOCAL STATIC READ_ONLY FORWARD_ONLY  
    FOR   
    SELECT DISTINCT rid,latbeg,longbeg   
    FROM dbo.Experiment  
    WHERE rID='041'  

    OPEN MY_CURSOR  
    FETCH NEXT FROM MY_CURSOR INTO @rID,@latBegin,@longBegin  
    WHILE @@FETCH_STATUS = 0  
    BEGIN   


        SELECT @minV=Min(Round(Sqrt(POWER((Abs(lat - @latBegin)),2) + POWER((Abs(long - @longBegin)),2)) * 3958.73926185, 4) * 1000,latitude) over (Partition by rID Order by rID)  
, @temp=temp

        FROM dbo.ExperimentDetails  
            WHERE rid='041'  

        Insert into dbo.Test(rid,lat,lon,min,temp) values   (@rid,@latBegin,@longBegin,@minV,@temp)  



        FETCH NEXT FROM MY_CURSOR INTO @rID,@latBegin,@longBegin  
    END  

    CLOSE MY_CURSOR  
    DEALLOCATE MY_CURSOR

A tabela de teste fica assim:

rID|lat      |long      |min |temp  
041|23.875464|-80.456798|12.1|96.23
041|33.776563|-81.157526|11.0|96.23

Os dados temporários são repetidos para a última linha, o que não está correto

Deve ficar assim:

rID|lat      |long      |min |temp  
041|23.875464|-80.456798|12.1|83.54
041|33.776563|-81.157526|11.0|54.54

Eu dei o máximo de informações que pude, mas se você precisar de mais, pergunte, agradeço qualquer ajuda, estou batendo minha cabeça nisso desde ontem. Atualmente estou tentando trazer temp, direção e tensão além de @minV, mas não me deixa fazer isso

Para a Etapa 5: O cálculo no cursor se parece com isso em teoria para a tabela Detalhes:

rID |lat       |long      |temp |DISTDIFF  
041 | 23.245632|-80.127952|56.23|372.12    
041 | 23.454555|-80.232456|66.23|300.22   
041 | 23.568763|-80.346586|26.23|50.48   
041 | 23.796545|-80.446586|86.23|12.10

Então ao inserir eu verifico o valor mínimo ou seja 12,10 e insiro os valores associados a essa linha.
Para a etapa 5, preciso encontrar o valor mais próximo de 360 ​​ANTES do valor mínimo não depois (pode haver outros valores mais próximos depois), que nesse caso é 372,12 e depois tirar a média de temp assim:

rID |minlat    |minlong   |lastlat  |lastlong  |Avgtemp  
041 | 23.796545|-80.446586|23.245632|-80.127952|58.73 

Usando Sql Server 2014

sql-server cursors
  • 1 respostas
  • 5002 Views
Martin Hope
SQLserving
Asked: 2018-03-06 07:25:53 +0800 CST

Criar/atualizar banco de dados de teste duplicado em tempo hábil do banco de dados de produção no mesmo servidor

  • 0

Desejo criar um banco de dados de ambiente de teste que seja atualizado a partir do banco de dados de produção todos os meses ou conforme necessário (ambos estariam no mesmo servidor). Não seria apenas atualização de dados, porque se eu fizer alterações no esquema, gostaria que ele também fosse atualizado. Qual seria a melhor forma?
Eu tentei alguns comandos do powershell, mas a maioria deles são por uma vez duplicações como esta . Se o powershell for o caminho a seguir, gostaria que ele procurasse esse banco de dados e, se existir, gostaria que ele fosse atualizado.

sql-server sql-server-2014
  • 1 respostas
  • 197 Views
Martin Hope
SQLserving
Asked: 2017-12-15 08:15:19 +0800 CST

Dados dos 5 anos anteriores com base em um ano específico

  • 1

Tenho uma tabela assim:

ID|Date    |Name|Score  
1 |1/1/2014|Erin|20.2  
2 |6/3/2014|Erin|21.2  
3 |7/2/2015|Emil|34.2    
4 |1/1/2016|Erin|20.2  
5 |2/2/2011|Paul|20.2  
6 |1/1/2012|John|54.2  
7 |1/1/2017|John|54.2  
8 |12/31/2016|Erin|23.2

Quero os dados de volta 5 anos com base no ano que forneço.
Estou usando isso:

select * from tblStdnt where date > DATEADD(Year,DATEDIFF(year,0, '2016')- 5, 0) 

Mas isso me dá dados a partir de 2017. Como faço para corrigir isso? alguma ideia?

Deve dar-me:

todos os dados de 2011 a 2016 (o período de 5 anos, independentemente do mês ou dia)

ATUALIZE
o link do DBFiddle

sql-server sql-server-2014
  • 4 respostas
  • 2081 Views
Martin Hope
SQLserving
Asked: 2017-12-07 06:37:13 +0800 CST

Conversão dinâmica de dados longos para amplos com várias colunas

  • 0

Estou tentando converter dados longos:

ID|SchoolID|Section|RepScore|SportsScore|PartyScore  
1 |20      |1      |23.2    |70.2       |42.3          
2 |20      |6      |65.2    |75.8       |52.3        
3 |20      |7      |77.2    |72.2       |66.3       
4 |21      |10     |13.2    |40.2       |72.3         
5 |21      |11     |25.2    |55.8       |72.3         
6 |21      |12     |37.2    |62.2       |76.3       

para dados amplos (estou usando apenas as três primeiras linhas para mantê-lo curto aqui):

SchoolID|RpScr1|RpScr6|RpScr7|SprtScr1|SprtScr6|SprtScr7|Prty1|Prty6|Prty7  
20      |23.2  |65.2  |77.2  |70.2    |75.8    |72.2    |42.3 |52.3 |66.3 

Eu tentei isso:

DECLARE @cols VARCHAR(1000)
DECLARE @cols2 VARCHAR(1000)
DECLARE @cols3 VARCHAR(1000)
DECLARE @sqlquery VARCHAR(2000)
SELECT  @cols = STUFF(( SELECT distinct  '], [a' + cast([Section] as varchar)
                        FROM [dbo].[SchoolData] FOR XML PATH('') ), 1, 2, '') + ']'
SELECT  @cols2 = STUFF(( SELECT distinct  '], [b' + cast([Section] as varchar)
                        FROM [dbo].[SchoolData] FOR XML PATH('') ), 1, 2, '') + ']'
SELECT  @cols3 = STUFF(( SELECT distinct  '], [c' + cast([Section] as varchar)
                        FROM [dbo].[SchoolData] FOR XML PATH('') ), 1, 2, '') + ']'
SET @sqlquery = 'SELECT * FROM
      (SELECT z.Section,z.RepScore,z.SportsScore,z.PartyScore
       FROM [dbo].[SchoolData] z) base
       PIVOT (Max(RepScore) FOR [Section] IN (' + @cols + ')) AS finalpivot
       PIVOT (Max(SportsScore) FOR [Section] IN (' + @cols + ')) AS finalpivot2
       PIVOT (Max(PartyScore) FOR [Section] IN (' + @cols + ')) AS finalpivot3'


EXECUTE ( @sqlquery )

Este é o erro que recebo: Msg 8114, Level 16, State 1, Line 7 Erro ao converter o tipo de dados nvarchar para int. Msg 473, Level 16, State 1, Line 7 O valor incorreto "a9" é fornecido no operador PIVOT. Msg 207, Level 16, State 1, Line 8 Nome de coluna inválido 'Section'.

Quando eu tento com apenas um assim:

DECLARE @cols VARCHAR(1000)  
DECLARE @sqlquery VARCHAR(2000)  
    SELECT  @cols = STUFF(( SELECT distinct  '], [a' + cast([Section] as varchar)  
                            FROM [dbo].[SchoolData] FOR XML PATH('') ), 1, 2, '') + ']'    
SET @sqlquery = 'SELECT * FROM  
          (SELECT z.Section,z.RepScore,z.SportsScore,z.PartyScore  
           FROM [dbo].[SchoolData] z) base  
           PIVOT (Max(RepScore) FOR [Section] IN (' + @cols + ')) AS   finalpivot' 

Ele funciona para apenas uma coluna e fornece nomes de coluna como este [1],[6],[7]. Mas não funciona para várias colunas como eu preciso. Alguma ideia?

sql-server xml
  • 3 respostas
  • 3925 Views
Martin Hope
SQLserving
Asked: 2017-11-14 08:54:14 +0800 CST

Unindo várias tabelas com requisitos complicados

  • 2

Tenho 3 tabelas assim:

Mestre: PK: SPID

SPID| ProjectID|DesignMix|ProjectType|Date    |ContentType  
1   |123      |AB-12    |New Proj   |1/1/2015|CT_1  
2   |145      |AR-13    |New Proj   |2/1/2015|CT_2  
3   |423      |AB-13    |New Proj   |1/1/2015|CT_3 

Detalhes: PK: há um ID de coluna de identidade

SPID|ProjectID|Length|TenthReading  
1   |123      |0.1   |43  
1   |123      |0.1   |45  
1   |123      |0.1   |46  
1   |123      |0.1   |55  
1   |123      |0.1   |59   
1   |123      |0.060 |120  
2   |145      |0.1   |130  
2   |145      |0.1   |45  
2   |145      |0.1   |46  
2   |145      |0.1   |55  
2   |145      |0.1   |59   
2   |145      |0.080 |140   
3   |423      |0.077 |43  
3   |423      |0.1   |45  
3   |423      |0.1   |46  
3   |423      |0.1   |155  
3   |423      |0.1   |59   
3   |423      |0.080 |99     

MaterialType: PK é um ID de coluna de identidade

ProjectID|DesignMix|Material  |Perc|ContentType  
123      |AB-12    |Concrete  |20  |CT_1  
123      |AB-12    |Limestone |60  |CT_1  
123      |AB-15    |Concrete  |20  |CT_1  
145      |AR-13    |Concrete  |20  |CT_2
145      |AR-13    |Concrete  |70  |CT_2
423      |AB-13    |Limestone |80  |CT_3 

As especificações da consulta são estas:
1. Join master e tabela de detalhes com base em SPID
2. Join master e tabela de materiais com base em ProjectID e DesignMix
3. Se um projectID e DesignMix específicos tiverem várias linhas em MaterialTable, por exemplo. Concrete and Limestone for ID=123, então deve ser mesclado com o nome 'Mixed'
4. Todos os dados da tabela Master e dados relevantes da tabela Details and Materials, ou seja, junções à esquerda preferidas especialmente entre Master e Materials
5. A data deve ser o ano 2015 e o Tipo de Projeto deve ser 'Novo Projeto'

A consulta resultante deve me dar algo assim:

ContentType|Material |CountLength|SumLength|AvgR |MinR|MaxR|CountRgreater95|SumLengthgreater95  
CT_1       |Mixed    |6          |0.56     |61.33|43  |120 |1              |0.06  
CT_2       |Concrete |6          |0.58     |79.16|45  |140 |2              |0.18  
CT_3       |Limestone|6          |0.557    |74.5 |43  |155 |2              |0.18 

Aqui está um link DBFiddle fornecendo definições de tabela de teste

Esta é a consulta que escrevi até agora, mas não está me dando os resultados corretos:

Select
Distinct
z.ContentType

,z.Material
,sum(CountLength) over (partition by Material,ContentType order by ContentType) CountLength
,sum(SumLength) over (partition by Material,ContentType order by ContentType) SumLength
,sum(AvgR) over (partition by Material,ContentType order by ContentType) AvgR
,sum(MinR) over (partition by Material,ContentType order by ContentType)MinR
,sum(MaxR) over (partition by Material,ContentType order by ContentType)MaxR

,CountRgreater95
,SumLengthgreater95 
From
(
Select 
x.ContentType
,CountLength
,SumLength
, AvgR
,MinR
,MaxR
,x.ProjectID
,x.DesignMix
,Coalesce(y.Material,x.Material) Material
,CountRgreater95
,SumLengthgreater95
From 
(Select Distinct
c.ContentType
,CountLength
,SumLength
, AvgR
,MinR
,MaxR
,c.ProjectID
,c.DesignMix
,c.Material


,CountRgreater95
,SumLengthgreater95

from
(
select distinct a.* ,b.Material,max(b.Perc) over (partition by b.Material,b.DesignMix order by a.ProjectID) Perc from  (SELECT a.ProjectID,a.DesignMix,a.ContentType, COUNT(b.Length) AS CountLength, SUM(b.Length) AS SumLength, CONVERT(int, ROUND(AVG(CONVERT(decimal(6, 2), b.TenthReading)), 0)) AS AvgR, MIN(b.TenthReading) AS MinR, MAX(b.TenthReading) AS MaxR, c.CountRgreater95, 
        c.SumLengthgreater95
FROM            dbo.Master AS a INNER JOIN
dbo.Details AS b ON a.SPID = b.SPID INNER JOIN
(SELECT        x0.ContentType, COUNT(x.Length) AS CountRgreater95, SUM(x.Length) AS SumLengthgreater95
FROM            dbo.Master AS x0 INNER JOIN
dbo.Details AS x ON x0.SPID = x.SPID
WHERE        (x.TenthReading >= 95) AND (x0.ProjectType = 'New Proj') AND (YEAR(x0.Date) = 2015)
GROUP BY x0.ContentType) AS c ON a.ContentType = c.ContentType
WHERE        (a.ProjectType = 'New Proj') AND (YEAR(a.Date) = 2015) 
GROUP BY a.ContentType, YEAR(a.Date), c.CountRgreater95, c.SumLengthgreater95,a.ProjectID,a.DesignMix  )a inner join MaterialType b on a.ProjectID=b.ProjectID and a.DesignMix=b.DesignMix 

) c  group by c.ContentType,ProjectID,DesignMix,Material,CountLength,SumLength,CountRgreater95,SumLengthgreater95,AvgR,MinR,MaxR
)x
Left Join
(
select d.ContentType
,d.ProjectID
,d.DesignMix
,'Mixed' as Material
 ,count(ProjectID) cnt
 from
 (
Select  Distinct
c.ContentType
,CountLength
,SumLength
, AvgR
,MinR
,MaxR
,c.ProjectID
,c.DesignMix
,c.Material
,CountRgreater95
,SumLengthgreater95

from
(
select distinct a.* ,b.Material,max(b.Perc) over (partition by b.Material,b.DesignMix order by a.ProjectID) Perc from  (SELECT a.ProjectID,a.DesignMix,a.ContentType, COUNT(b.Length) AS CountLength, SUM(b.Length) AS SumLength, CONVERT(int, ROUND(AVG(CONVERT(decimal(6, 2), b.TenthReading)), 0)) AS AvgR, MIN(b.TenthReading) AS MinR, MAX(b.TenthReading) AS MaxR, c.CountRgreater95, 
        c.SumLengthgreater95
FROM            dbo.Master AS a INNER JOIN
dbo.Details AS b ON a.SPID = b.SPID INNER JOIN
(SELECT        x0.ContentType,x1.Material, COUNT(x.Length) AS CountRgreater95, SUM(x.Length) AS SumLengthgreater95
FROM            dbo.Master AS x0 INNER JOIN
dbo.Details AS x ON x0.SPID = x.SPID left Join
MaterialType x1 on x0.ProjectID=x1.ProjectID and x0.DesignMix=x1.DesignMix
WHERE        (x.TenthReading >= 95) AND (x0.ProjectType = 'New Proj') AND (YEAR(x0.Date) = 2015)
GROUP BY x0.ContentType,x1.Material) AS c ON a.ContentType = c.ContentType
WHERE        (a.ProjectType = 'New Proj') AND (YEAR(a.Date) = 2015) 
GROUP BY a.ContentType, YEAR(a.Date), c.CountRgreater95, c.SumLengthgreater95,a.ProjectID,a.DesignMix  )a inner join MaterialType b on a.ProjectID=b.ProjectID and a.DesignMix=b.DesignMix 

) c  group by c.ContentType,ProjectID,DesignMix,Material,CountLength,SumLength,CountRgreater95,SumLengthgreater95,AvgR,MinR,MaxR
)d
group by d.ContentType,ProjectID,DesignMix 
Having count(ProjectID)>1
)y on x.ContentType=y.ContentType and x.ProjectID=y.ProjectID and x.DesignMix=y.DesignMix
)z

Verifique o link do DBFiddle para ver meus resultados

sql-server join
  • 2 respostas
  • 1167 Views
Martin Hope
SQLserving
Asked: 2017-11-03 05:29:55 +0800 CST

Sql join com três tabelas e várias linhas

  • 0

Eu tenho três tabelas assim:

Caminhos de mesa:

Esta tabela salva as informações do corredor e o comprimento de milhas

ID|Name|BMP  |EMP  |Vendor  
1 |Alex|12.25|22.25|Heinz  
2 |Abby|0.00 |3.55 |Uni  
3 |Marx|5.55 |10.55|Jam 

Tabela RaceDetails: Esta tabela salva a direção (a maioria das corridas tem para cima e para baixo, caso em que o intervalo muda)

ID|Dir|BMP  |EMP  
1 |U  |12.26|12.33  
1 |U  |12.33|12.47  
1 |U  |21.12|21.99  
1 |U  |22.00|22.44  
1 |U  |22.15|22.36  
2 |U  |0.00 |2.55  
2 |U  |2.55 |4.56  
2 |D  |4.56 |2.55  
2 |D  |2.55 |0.00   
3 |U  |5.55 |9.55  
3 |U  |9.55 |11.69  
3 |D  |11.69|9.55  
3 |D  |9.55 |-0.12  

Table RaceSense:

ID|BMP  |EMP  |SENSOR  
1 |12.25|20.33|1  
1 |20.33|22.25|3  
2 |0.00 |3.55 |2  
3 |5.55 |9.55 |2  
3 |9.55 |10.55|5

Estou fazendo uma junção entre eles assim:

Select    distinct * 
from      Runners a 
left join RaceDetails b 
on        a.ID=b.ID 
left join RaceSense c 
on        a.ID=c.ID  

Isso está me dando 22 linhas porque duplica dados de Racedetails devido a várias linhas para o mesmo ID na tabela RaceSense

Eu também tentei isso:

Select    distinct * 
from      Runners a 
left join RaceDetails b 
on        a.ID=b.ID 
left join RaceSense c 
on        a.ID=c.ID 
and      (b.BMP+b.EMP)/2>=c.BMP 
and      (b.BMP+b.EMP)/2<=c.EMP  

Isso me dá 8 linhas e não 13 porque algumas das médias estão fora do intervalo real da Tabela RaceSense

Eu quero 13 linhas sem duplicação, assim:

ID|Name  |BMP  |EMP  |VENDOR|SENSOR  
1 |Alex  |12.26|12.33|Heinz |1  
1 |Alex  |12.33|12.47|Heinz |1  
1 |Alex  |21.12|21.99|Heinz |3  
1 |Alex  |22.00|22.44|Heinz |3  
1 |Alex  |22.15|22.36|Heinz |3  
2 |Abby  |0.00 |2.55 |Uni   |2 
2 |Abby  |2.55 |4.56 |Uni   |2 
2 |Abby  |4.56 |2.55 |Uni   |2
2 |Abby  |2.55 |0.00 |Uni   |2
3 |Marx  |5.55 |9.55 |Jam   |2 
3 |Marx  |9.55 |11.69|Jam   |5  
3 |Marx  |11.69|9.55 |Jam   |5  
3 |Marx  |9.55 |-0.12|Jam   |2   

A forma que eu quero fazer é:

1. se o BMP e EMP na tabela Detalhes estiverem dentro da tabela Sense BMP e EMP, então isso é bom.
2.Se BMP ou EMP em Detalhes estiver fora da tabela BMP ou EMP em Sense, então pegue a média de BMP e EMP em Detalhes e certifique-se de que esteja dentro do intervalo da tabela Sense.
3. Se o valor médio também estiver fora do intervalo, quero expandir a tabela Sense BMP e EMP em 0,1
4. Caso contrário, dê-me um valor nulo

Alguma ideia?

sql-server join
  • 1 respostas
  • 879 Views
Martin Hope
SQLserving
Asked: 2017-10-24 05:35:24 +0800 CST

Inserindo ID e Data para localizar dados para o aplicativo C#/VBA

  • 1

Estou tentando permitir que os usuários carreguem uma planilha do Excel para inserir dados no banco de dados sql. Quando eles carregam dados, eu quero uma exibição de datagrid para mostrar os dados que eles acabaram de carregar no banco de dados e poder ver isso em retrospecto também com base na data.

Criei uma tabela assim:

**dbo.DB_TRACK**  
V_ID Identity  
TBL_N varchar(20)  
ID  int  
ENTR_DT date  

Eu escrevi o procedimento armazenado para uma das tabelas de banco de dados como esta:

Create Procedure dbo.Insert_Students  
(  
SName varchar(10),  
SAge varchar(10),  
SAdmit_Dt varchar(10)  
)  
    Declare @id table(id int),  
     @pk int,  
     @iSAge int,  
     @iSAdmit_Dt date  

     Set @iSAge=@SAge  
     Set @iSAdmit_Dt=Convert(Date,@SAdmit_Dt)

    BEGIN TRY  

      BEGIN TRANSACTION  

      Insert into dbo.Student(Name,Age,AdmissionDt)  
      OUTPUT INSERTED.S_ID into @id    
      Values  
      (@SName,@iSAge,@iSAdmit_Dt)  

      COMMIT TRANSACTION  

      BEGIN TRANSACTION  

      Insert into dbo.DB_TRACK (TBL_N, ID, ENTR_DT ) 
      VALUES ('dbo.Student', (Select @pk=id from @id),GETDATE)

      COMMIT TRANSACTION  

    END TRY  
    BEGIN CATCH

      IF @@TRANCOUNT > 0  
          ROLLBACK TRANSACTION  

    END CATCH

Estou recebendo o erro:

Sintaxe incorreta perto de '='.

ATUALIZAÇÃO:
Não estou recebendo mais este erro (Graças a David Browne) e consegui salvar o SP, mas ao executar o SP, estou recebendo este erro:

Falha na conversão ao converter data e/ou hora da cadeia de caracteres.

Eu tentei Convert(date,GetDate()), mas não funcionou

O código que chama esse procedimento armazenado está no VBA assim:

Dim SName, SAge,SAdmit_DT as String  
Dim oSName, oSAge,oSAdmit_DT as ADODB.Parameter  

SName= ws.Cells(1, 11)  
SAge = ws.Cells(1, 12)  
SAdmit_DT = ws.Cells(1, 13)  

Set oSName = cmd.CreateParameter("@SName", adVarChar, adParamInput, 10, SName)  
cmd.Parameters.Append oSName  
Set oSAge = cmd.CreateParameter("@SAge", adVarChar, adParamInput, 10, SAge)  
cmd.Parameters.Append oSAge  
Set oSAdmit_DT = cmd.CreateParameter("@SAdmit_DT", adVarChar, adParamInput, 10, SAdmit_DT)  
cmd.Parameters.Append oSAdmit_DT 

cmd.Execute' This is where it errors out

Eu tentei remover o SAdmit_Dt, mas ainda recebi o erro
Tentei passar DATE () pelo Excel, mas recebi um erro de estouro de aritmética
Alguma idéia de como corrigir isso? Também existe uma maneira melhor de fazer o que estou tentando fazer?

sql-server stored-procedures
  • 1 respostas
  • 63 Views
Martin Hope
SQLserving
Asked: 2017-07-29 05:54:12 +0800 CST

Comparação de intervalo entre tabelas

  • 1

Tenho duas tabelas assim:

Runners:  
Name|Date    |FromDist|ToDist|RaceN  
Al  |1/1/2017|1       |9     |axe  
CC  |1/1/2017|11      |12    |axe   
Bm  |2/1/2017|6       |2     |Charity  



RaceStandards:  
RaceN  |Date    |FromDist|ToDist|Direction|Rank  
axe    |1/1/2017|1       |10    |+        |1
Charity|2/1/2017|10      |4     |-        |2

A tabela de padrões de corrida fornece as faixas de direção e distância para cada corrida. A tabela de corredores fornece as distâncias percorridas por cada corredor.
Pergunta/Problema/O que eu quero fazer:
1. Obter a direção
2. Se for +, o intervalo deve ser >=FromDist e <=ToDist; Se for -, o intervalo deve ser <=FromDist e >=ToDist
3. Compare o intervalo de distância de Runners FromDist e ToDist com base nas etapas 1 e 2. Atribua o número de classificação dessa corrida se eles estiverem no intervalo, caso contrário, atribua 0
4. Se Runner estiver fora de alcance o valor pode ser zero

Então o resultado final seria algo assim:

Runners:  
    Name|Date    |FromDist|ToDist|RaceN   |Rank  
    Al  |1/1/2017|1       |9     |axe     |1
    CC  |1/1/2017|11      |12    |axe     |0
    Bm  |2/1/2017|6       |2     |Charity |2  

Haveria centenas de linhas em cada tabela, então eu gostaria que fosse dinâmico. Pode haver sobreposições e outras coisas, mas eu só preciso de um avanço por enquanto, assim que obtiver um código base, posso tentar expandir a partir daí. Eu apreciaria qualquer ajuda. Eu tentei dar o máximo de detalhes, se for necessário mais, por favor, pergunte.

sql-server sql-server-2014
  • 1 respostas
  • 61 Views
Martin Hope
SQLserving
Asked: 2017-06-02 20:09:46 +0800 CST

MS Access-Anexos ao SQL Server-Imagens ou Varchar(max)

  • 0

Estou tentando mover um banco de dados do MS Access para o SQL Server 2014 e estou usando o SSMA for Access. Algumas das tabelas têm anexos (pdfs, jpgs, emails, etc.).

Quando eu movo para o SQL Server, os anexos aparecem como nomes de arquivos:
insira a descrição da imagem aqui

Existe alguma maneira de fazer isso do lado do MS Access ou do lado do SQL Server?

Baixei todos os arquivos para o meu sistema e estava pensando em combinar os nomes com os arquivos na pasta para carregá-los no banco de dados por meio do SQL, mas existem vários arquivos para uma linha em alguns casos, então basicamente não tenho certeza Como lidar com isto.

sql-server ms-access
  • 1 respostas
  • 1258 Views
Martin Hope
SQLserving
Asked: 2017-05-31 09:55:45 +0800 CST

Função MS-Access RANK()

  • 0

Eu tenho uma tabela no Access assim:

ID |  Op_ID  
1  |  1  
1  |  2  
2  |  3  
3  |  4  
3  |  5  
3  |  6  

Existe uma consulta SELECT que eu possa executar no Access que me daria algo assim?:

ID |  Count(ID)  
1  |  1  
1  |  2  
2  |  1  
3  |  1  
3  |  2  
3  |  3 

Então, basicamente, eu quero uma contagem de ID que faça um loop sobre o ID toda vez que o ID for alterado.

ms-access
  • 1 respostas
  • 15937 Views
Martin Hope
SQLserving
Asked: 2017-03-21 04:26:05 +0800 CST

Melhores formatos de upload de dados

  • 1

A maioria dos nossos arquivos gerados automaticamente contém números inteiros, decimais, data, hora e, às vezes, varchar. Estes são dados de instrumentação. Como faremos o upload desses arquivos diretamente para um banco de dados SQL Server, estávamos tentando decidir qual é o formato de arquivo mais eficiente para geração automática a partir de nossa instrumentação.

Qual é o formato de arquivo mais eficiente para carregar dados em um banco de dados SQL Server? Eu pensei que seria o formato de texto, mas quando fiz um experimento com CSV, o CSV tende a ocupar menos espaço e também é mais fácil para os usuários analisarem.

O tamanho do arquivo de dados varia de 50K a 250K. Apenas alguns variam em MBs.

Estou trabalhando na criação de um aplicativo que faria upload de dados para o banco de dados. Usamos LabView para nossos dados de instrumentação, então é onde queremos o formato de arquivo padronizado.

Estou inclinado para CSV. Não tenho muita experiência com XML, então posso considerar que se as vantagens superam em muito as do CSV. A legibilidade é minha preocupação apenas em termos de controle de qualidade. Pode haver casos em que o usuário queira alterar ou corrigir alguns dados antes de fazer o upload. A velocidade também é importante, mas com tamanhos de arquivo tão pequenos, não estou muito preocupado com isso.

sql-server csv
  • 1 respostas
  • 1663 Views
Martin Hope
SQLserving
Asked: 2017-02-11 10:42:27 +0800 CST

Duas tabelas, uma chave estrangeira e duas chaves primárias

  • 0

Digamos que existam duas tabelas:
Aluno:
AlunoID(Chave Primária)
Nome

StudentTeams:
StudentID (Chave Primária, Chave Estrangeira)
TeamName

StudentID na tabela StudentTeams faz referência à chave primária da tabela Student. Quais seriam os prós e contras de tal estrutura em termos de integridade relacional?

database-design foreign-key
  • 2 respostas
  • 1451 Views
Martin Hope
SQLserving
Asked: 2017-01-27 11:35:11 +0800 CST

Criando intervalo para campos especiais no SQL Server

  • 4

Eu tenho duas colunas que se parecem com isso:

Start_Post End_Post
---------- --------
102+20,45 153+19,22
120+21,25 220+25,30
... ...

E eu quero introduzir uma restrição para cada coluna:

  • Start_Pos
    Alcance mínimo: 100+50,30
    Alcance máximo: 150+20,65
  • End_Pos
    Alcance mínimo: 150+60,30
    Alcance máximo: 500+20,75

Todos os valores estão em pés e seguem um formato especial. É uma convenção de construção e eu não sou um especialista, mas que eu saiba, 1 + 00 seriam 100 pés. Essencialmente, tomando o intervalo acima de 100+50,30 a 150+20,65 significaria uma distância de 4970 pés. O que eu fiz foi apenas remover o sinal de mais e subtrair os dois números. Espero que tenha feito sentido.

Existe uma maneira de definir essa restrição, mantendo o formato?

sql-server performance
  • 2 respostas
  • 142 Views
Martin Hope
SQLserving
Asked: 2017-01-20 11:10:15 +0800 CST

Chaves substitutas como chaves estrangeiras

  • 0

Eu tenho uma pergunta sobre chaves substitutas, digamos que eu tenha duas tabelas (no servidor sql):

Tabela A : Student_ID, Nome, Escola, Seção
Tabela B : Book_ID, Student_ID, IssueDate, BookName

Se Student_ID for uma chave substituta clusterizada e Name for um índice não clusterizado. Como alguém inseriria dados manualmente na Tabela B sem saber o Student_ID. Sei que talvez tenha que fazer uma pesquisa na tabela A para encontrar os IDs, mas isso não seria eficiente. Existe alguma maneira de tornar isso eficiente? Estou tentando pensar como as chaves substitutas funcionam essencialmente em termos de eficiência como uma chave estrangeira ao considerar as inserções.

sql-server database-design
  • 2 respostas
  • 726 Views
Martin Hope
SQLserving
Asked: 2017-01-13 12:58:11 +0800 CST

Processo de Chave Estrangeira

  • 0

Estou tentando entender como as chaves estrangeiras funcionariam de uma perspectiva de processamento interno (estou usando o SQLServer). Em outras palavras, como uma tabela seria afetada pela adição de uma chave estrangeira?

Digamos que eu tenha duas tabelas (PK são não nulos):

TableA : PK Student_ID, StudentName, StudentAddress
TableB : PK Books_ID, FK Student_ID, Books_IssueMonth

select Student_ID from TableB where Books_IssueMonth=January;

Quando eu executo uma instrução sql ao TableBchamar Student_ID, o sistema é informado para primeiro procurá-lo TableAe, em seguida, apontar para o índice clusterizado ( Books_ID) em TableB?

Seriam buscas de duas mesas?

ou seria uma busca na TableA e scan na TableB?

database-design foreign-key
  • 2 respostas
  • 119 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