2017-06-11 18 views
-2

このコードをSQL Server用に作成し、2017年の最初の学期にライダー "AsdoVolante"が最初に来た回数を選択しました。しかし動作しません。何が間違っていますか?コードのためのSQL Serverで作成されたSQL Serverのコードでエラーが発生しました

SELECT P.Data, Nm.Nome, epp.PosicaoFinal 
FROM Prova P, Piloto Nm, EquipaParticipaProva epp 
WHERE epp.PosicaoFinal = (SELECT PosicaoFinal FROM EquipaParticipaProva where PosicaoFinal = 1) 
HAVING Nm.Nome ='AsdoVolante' AND P.Data BETWEEN '2017-01-01' AND '2017-06-30'; 

テーブル:SQL Serverで作成された

CREATE TABLE Carro(
IdCarro INT NOT NULL, 
Marca VARCHAR(20) NOT NULL, 
Modelo VARCHAR(50), 
PRIMARY KEY (IdCarro)); 

CREATE TABLE Piloto(
IdPiloto INT NOT NULL, 
Nome VARCHAR(20) NOT NULL, 
Morada VARCHAR(50), 
Telefone INT, 
PRIMARY KEY (IdPiloto)); 

CREATE TABLE Equipa(
IdEquipa INT NOT NULL, 
Nome VARCHAR(20), 
Morada VARCHAR(50), 
Telefone INT, 
PRIMARY KEY (IdEquipa)); 

CREATE TABLE Patrocinador(
IdPatrocinador INT NOT NULL, 
Nome VARCHAR(20)NOT NULL, 
Morada VARCHAR(50), 
PRIMARY KEY (IdPatrocinador)); 

CREATE TABLE Prova(
IdProva INT NOT NULL, 
Nome VARCHAR(20) NOT NULL, 
Local VARCHAR(50) NOT NULL, 
Data DATE NOT NULL, 
NrVoltas INT NOT NULL, 
MelhorTempo TIME, 
PRIMARY KEY (IdProva)); 

CREATE TABLE EquipaParticipaProva(
IdInscricao INT NOT NULL, 
IdEquipa INT NOT NULL, 
IdCarro INT NOT NULL, 
IdPiloto INT NOT NULL, 
IdProva INT NOT NULL, 
PosicaoFinal INT, 
TempoFinal TIME, 
FOREIGN KEY (IdProva) REFERENCES Prova(IdProva), 
FOREIGN KEY (IdCarro) REFERENCES Carro(IdCarro), 
FOREIGN KEY (IdPiloto) REFERENCES Piloto(IdPiloto), 
FOREIGN KEY (IdEquipa) REFERENCES Equipa(IdEquipa), 
PRIMARY KEY (IdInscricao)); 

CREATE TABLE Voltas(
IdVolta INT NOT NULL, 
IdInscricao INT NOT NULL, 
PosicaoRelativa INT NOT NULL, 
TempoVolta TIME, 
FOREIGN KEY (IdInscricao) REFERENCES EquipaParticipaProva(IdInscricao), 
PRIMARY KEY (IdVolta, IdInscricao)); 

CREATE TABLE PatrocinadorOficial(
IdPatrocinador INT NOT NULL, 
IdProva INT NOT NULL, 
Valor MONEY NOT NULL, 
FOREIGN KEY (IdProva) REFERENCES Prova(IdProva), 
PRIMARY KEY (IdPatrocinador, IdProva)); 

CREATE TABLE PatrocinadorNaoOficial(
IdPatrocinador INT NOT NULL, 
IdProva INT NOT NULL, 
Valor MONEY NOT NULL, 
FOREIGN KEY (IdProva) REFERENCES Prova(IdProva), 
PRIMARY KEY (IdPatrocinador, IdProva)); 

CREATE TABLE Mecanico(
IdMecanico INT NOT NULL, 
Nome VARCHAR(20), 
Morada VARCHAR(50), 
Telefone INT, 
PRIMARY KEY (IdMecanico)); 

CREATE TABLE Afinacao(
IdAfinacao INT NOT NULL, 
IdMecanico INT NOT NULL, 
IdEquipa INT NOT NULL, 
TipoAfinacao VARCHAR(20) NOT NULL, 
TempoDespendido TIME, 
Data DATE NOT NULL, 
FOREIGN KEY (IdEquipa) REFERENCES Equipa(IdEquipa), 
FOREIGN KEY (IdMecanico) REFERENCES Mecanico(IdMecanico), 
PRIMARY KEY (IdAfinacao)); 

挿入:

INSERT INTO Carro 
VALUES (1, 'Nissan', 'Skyline'); 

INSERT INTO Carro 
VALUES (2, 'Subaru', 'Impreza'); 

INSERT INTO Carro 
VALUES (3, 'Mitsubishi', 'Evolution'); 

INSERT INTO Piloto 
VALUES (111, 'Piloto 1', 'Castelo Branco', 111111111); 

INSERT INTO Piloto 
VALUES (112, 'Piloto 2', 'Castelo Branco', 111111112); 

INSERT INTO Piloto 
VALUES (113, 'JaGanhou', 'Lisboa', 111111113); 

INSERT INTO Piloto 
VALUES (114, 'AsdoVolante', 'Lisboa', 111111114); 

INSERT INTO Piloto 
VALUES (115, 'AsdoPedal', 'Beja', 111111115); 

INSERT INTO Piloto 
VALUES (116, 'Pelo Nome', 'Santarém', 111111116); 

INSERT INTO Equipa 
VALUES (001, 'OsAtolados', 'Castelo Branco', 272722123); 

INSERT INTO Equipa 
VALUES (002, 'Sparco', 'Lisboa', 212312432); 

INSERT INTO Equipa 
VALUES (003, 'ESTeam', 'Castelo Branco', 272343573); 

INSERT INTO Prova 
VALUES (010, 'RallycrossCB', 'Castelo Branco', '2017-02-02', 4, '00:04:20'); 

INSERT INTO Prova 
VALUES (11, 'RallyLels', 'Bells', '2017-03-04', 10, '00:10:00'); 

INSERT INTO Prova 
VALUES (12, 'Rally Portugal', 'Fafe', '2017-05-15', 2, '00:15:00'); 

INSERT INTO Prova 
VALUES (13, 'Rally CB', 'Castelo Branco', '2017-01-01', 2, '00:15:00'); 

INSERT INTO Prova 
VALUES (14, 'Rally Norte', 'Porto', '2017-02-02', 2, '00:30:00'); 

INSERT INTO EquipaParticipaProva 
VALUES (441, 002, 3, 113, 010, 1, '00:04:00'); 

INSERT INTO EquipaParticipaProva 
VALUES (442, 1, 2, 111, 11, 1, '00:10:00'); 

INSERT INTO EquipaParticipaProva 
VALUES (443, 3, 1, 112, 10, 1,'00:05:00'); 

INSERT INTO EquipaParticipaProva 
VALUES (444, 3, 1, 114, 12, 1,'00:15:00'); 

INSERT INTO EquipaParticipaProva 
VALUES (445, 3, 1, 114, 13, 1,'00:15:00'); 

INSERT INTO EquipaParticipaProva 
VALUES (446, 3, 2, 114, 14, 5,'01:00:00'); 

INSERT INTO Voltas 
VALUES (1, 443, 1, '00:01:15'); 

INSERT INTO Voltas 
VALUES (2, 443, 1, '00:01:15'); 

INSERT INTO Voltas 
VALUES (3, 443, 3, '00:01:15'); 

INSERT INTO Voltas 
VALUES (1, 444, 1, '00:07:30'); 

INSERT INTO Voltas 
VALUES (2, 444, 1, '00:07:30'); 

INSERT INTO Voltas 
VALUES (1, 445, 1, '00:07:30'); 

INSERT INTO Voltas 
VALUES (2, 445, 1, '00:07:30'); 

INSERT INTO Voltas 
VALUES (1, 446, 5, '00:30:00'); 

INSERT INTO Voltas 
VALUES (2, 446, 5, '00:30:00'); 

INSERT INTO Voltas 
VALUES (4, 443, 3, '00:01:15'); 

INSERT INTO Voltas 
VALUES (1, 441, 1, '00:01:00'); 

INSERT INTO Voltas 
VALUES (2, 441, 1, '00:01:20'); 

INSERT INTO Voltas 
VALUES (3, 441, 1, '00:01:00'); 

INSERT INTO Voltas 
VALUES (4, 441, 1, '00:01:00'); 

INSERT INTO Voltas 
VALUES (5, 441, 1, '00:01:00'); 

INSERT INTO Voltas 
VALUES (6, 441, 1, '00:01:00'); 

INSERT INTO Voltas 
VALUES (7, 441, 1, '00:01:00'); 

INSERT INTO Voltas 
VALUES (8, 441, 1, '00:01:20'); 

INSERT INTO Voltas 
VALUES (9, 441, 1 ,'00:00:30'); 

INSERT INTO Voltas 
VALUES (10, 441, 1, '00:01:30'); 

INSERT INTO Voltas 
VALUES (1, 441, 10, 2, '00:00:45'); 

INSERT INTO Voltas 
VALUES (2, 441, 10, 2, '00:01:00'); 

INSERT INTO Voltas 
VALUES (3, 441, 10, 2, '00:01:00'); 

INSERT INTO Voltas 
VALUES (4, 441, 10, 2, '00:01:15'); 

INSERT INTO PATROCINADOR 
VALUES(921, 'IPCB', 'Av da Talagueira'); 

INSERT INTO PATROCINADOR 
VALUES(922, 'Bells Bar', 'Praceta Qualquer Coisa'); 

INSERT INTO PATROCINADOR 
VALUES(923, 'MonsterEnergy', 'USA'); 

INSERT INTO PATROCINADOR 
VALUES(924, 'Sical', 'Lisboa'); 

INSERT INTO PATROCINADOROFICIAL 
VALUES(923, 010, 10000); 

INSERT INTO PATROCINADOROFICIAL 
VALUES(921, 11, 8000); 

INSERT INTO PATROCINADORNAOOFICIAL 
VALUES(920, 010, 5000); 

INSERT INTO PATROCINADORNAOOFICIAL 
VALUES(922, 11, 3000); 

INSERT INTO PATROCINADORNAOOFICIAL 
VALUES(924, 10, 6000); 

INSERT INTO MECANICO 
VALUES(333, 'Zacarias','Leiria',933628487); 

INSERT INTO MECANICO 
VALUES(334, 'Zé', 'Bragança', 963628487); 

INSERT INTO MECANICO 
VALUES(335, 'Luís', 'Lisboa', 913628487); 

INSERT INTO AFINACAO 
VALUES(20, 333, 001, 'Travões', '1:00:00', '2017-02-03'); 

INSERT INTO AFINACAO 
VALUES(21, 334, 002, 'Luzes', '00:15:00', '2017-02-03'); 

INSERT INTO AFINACAO 
VALUES(22, 335, 003, 'Travoes', '1:00:00', '2017-02-01'); 
+0

どのように動作しませんか?エラーはありますか?予期しない出力?サンプル入力データとクエリの期待結果を共有します。 –

+0

これはエラーです。メッセージ8121、レベル16、状態1、行364 列「Piloto.Nome」は、集計関数またはGROUP BY句に含まれていないため、HAVING句では無効です。 メッセージ8121、レベル16、状態1、行364 'Prova.Data'列が集計関数またはGROUP BY句に含まれていないため、HAVING句で無効です。 メッセージ8121、レベル16、状態1、行364 'Prova.Data'列が集計関数またはGROUP BY句に含まれていないため、HAVING句で無効です。 @ChetanRanpariya – Jokerby

+0

あなたは改善の余地があるクエリの問題領域がたくさんあります。しかし、HAVINGをANDで置き換えることから始めます。 –

答えて

0

それはあなたのために動作します。この

SELECT P.Data, Nm.Nome, epp.PosicaoFinal 
FROM Prova P, Piloto Nm, EquipaParticipaProva epp 
WHERE epp.PosicaoFinal **IN** (SELECT PosicaoFinal FROM EquipaParticipaProva where PosicaoFinal = 1) 
HAVING Nm.Nome ='AsdoVolante' AND P.Data BETWEEN '2017-01-01' AND '2017-06-30'; 

を試してみてください

関連する問題