Чтобы устранить ошибку «Неверный синтаксис рядом с ключевым словом« SELECT »», этот оператор необходимо записать в круглых скобках вокруг SELECT
:
SET @UnsegQuery = (SELECT DISTINCT UnsegmQuery FROM tbData WHERE SegQuery = @seg)
Если вы используете SET
для установкизначение @UnsegQuery
, вы также должны быть уверены, что SELECT
вернет только одно значение.В качестве альтернативы вы можете использовать:
SELECT DISTINCT @UnsegQuery = UnsegmQuery FROM tbData WHERE SegQuery = @seg
, чтобы установить значение @UnsegQuery
.В этом случае, если возвращено более одной записи, @UnsegQuery
будет установлено на значение последней записи.
Произошла ошибка «Неверный синтаксис рядом с ключевым словом« UNION »», поскольку вы не можетеиспользуйте ORDER BY
перед UNION
.Вы можете использовать ORDER BY
только после последнего оператора UNION
(дополнительную информацию см. В документации MSDN ).
UPDATE Чтобы ответить на ваш вопрос из вашего последнего комментария, правильный синтаксис для последней части запроса должен выглядеть примерно так:
SELECT foo.Strategy, foo.Versions
FROM (
SELECT Strategy, Versions, ROW_NUMBER() OVER (ORDER BY nDCG DESC) AS [rownumber]
FROM tbData) foo
WHERE foo.rownumber > 1
Этот оператор выберет все записи из tbData
, упорядоченные по убыванию nDCG
кроме первой записи.Я не уверен, что это поможет вам решить проблему, но синтаксис правильный.
ОБНОВЛЕНИЕ 2
ОК, думаю, я понимаю проблему.Вы хотите выбрать все строки в таблице, но вы хотите, чтобы одна конкретная запись была первой, а другая конкретная запись - второй, а затем все остальные.Один из подходов к этому заключается в использовании оператора CASE WHEN
для присвоения значений желаемой первой строке, желаемой второй строке, а затем сортировки по этому значению.Например:
DECLARE @myTable TABLE([ID] INT, [Student] VARCHAR(10))
INSERT INTO @myTable VALUES(1, 'Tom')
INSERT INTO @myTable VALUES(2, 'Spooky')
INSERT INTO @myTable VALUES(3, 'Rex')
INSERT INTO @myTable VALUES(4, 'Rambo')
INSERT INTO @myTable VALUES(5, 'Betty')
DECLARE @firstID INT, @secondID INT
SET @firstID = 2
SET @secondID = 4
SELECT *
FROM @myTable
ORDER BY
CASE
WHEN [ID] = @firstID THEN 1
WHEN [ID] = @secondID THEN 2
ELSE 3
END,
[ID]