Как я могу сделать этот запрос в SQL Server Compact Edition? - PullRequest
2 голосов
/ 22 января 2009

этот подзапрос работает в SQL Server:

select systemUsers.name, 
    (select count(id) 
     from userIncidences 
     where idUser = systemUsers.id ) 
from systemUsers

Как это можно сделать в SQL Compact?

Спасибо!

Ответы [ 4 ]

10 голосов
/ 15 марта 2009

В некоторых случаях вы не можете избежать подзапроса, например, если вам нужно включить вычисляемые столбцы, которые используют данные из текущей и предыдущей строки. Рассмотрим этот запрос, например:

SELECT     
     (Current.Mileage - Last.Mileage)/Quantity as MPG
FROM         
     GasPurchases AS Current
     LEFT OUTER JOIN GasPurchases AS Last
     ON Last.Date =
        (SELECT MAX(PurchaseDate)
        FROM GasPurchases
        WHERE PurchaseDate < Current.PurchaseDate)

Это приведет к ошибке синтаксического анализа:

Ошибка выполнения SQL.

Источник ошибки: поставщик данных SQL Server Compact ADO.NET Сообщение об ошибке: при анализе запроса произошла ошибка.

Я нашел этот поток на MSDN, который имеет обходной путь. Изменяя подзапрос, чтобы он возвращал набор вместо скалярного значения, я смог сохранить и выполнить следующий запрос.

SELECT     
     (Current.Mileage - Last.Mileage)/Quantity as MPG
FROM         
     GasPurchases AS Current
     LEFT OUTER JOIN GasPurchases AS Last
     ON Last.Date IN
        (SELECT MAX(PurchaseDate)
        FROM GasPurchases
        WHERE PurchaseDate < Current.PurchaseDate)
8 голосов
/ 22 января 2009

Попробуйте это:

SELECT su.Name, COUNT(ui.ID)
FROM systemUsers su
LEFT JOIN userIncidences ui ON ui.idUser = su.ID
GROUP BY su.Name

[Edit:]
Изначально у меня был INNER JOIN, как и у Tomalak, но я понял, что это исключит пользователей без инцидентов, а не покажет их со счетом 0. Это может быть даже то, что вы хотите, но это не соответствует вашему оригиналу.

0 голосов
/ 07 марта 2014

Как то так? (используя Northwind. Подробности заказа)

Фрагмент кода:

SELECT     [Unit Price] * Quantity AS Cost,

[Unit Price] * Quantity * 1.25 AS CostWithVAT
FROM         [Order Details]

Источник Проект системы бронирования авиабилетов

0 голосов
/ 23 сентября 2009

Спасибо, ребята, DoctaJonez, я нашел ваш маленький пост самым полезным в моем подзапросе. Ваш синтаксис работает с SQL Server Compact v3.5. Вот запрос, который я пробовал (который работает).

Кстати, жестко закодированное значение, которое вы видите (38046), я знаю во время выполнения запроса

insert into tLink (start,stop,associativeobject,linktype,id,name,guid,createTime,modifyTime,externalID,description,linkLabel,LinkDetails)
select newtable.id,stop,associativeobject,linktype,newtable.id,name,guid,createTime,modifyTime,externalID,description,linkLabel,LinkDetails from tLink l, (select id, '38046' as newid from tObject Where name = 'Step 1' and id <> '38046') as newtable
where l.start = newtable.newid and start in (38046)
...