У меня проблемы данных видели моей публичной демо-сайт:T-SQL с ORDER BY различия в хранимой процедуре выявления GROUP BY вопросов
http://cbmiweb.com/GmapsV3/opedemo3.aspx
По умолчанию ORDER
появляется ОК, но меняющегося в Order By Total#Awards
разоблачений проблема ясно, но я застрял на том, как это исправить.
Веб-страница предоставляет ссылку к необработанных данных возвращенных (пожары хранимую процедуру), где вы можете увидеть проблему данных:
http://cbmiweb.com/CBMI.WebAPIservice/api/markers/GetGrants/2
Короче говоря, почему @Sort = 1
«группа» Заведение = «КОЛЛЕДЖ ГОСУДАРСТВЕННОГО СООБЩЕСТВА ЕЩЕСТВА», но при использовании @Sort = 2
, это лицо «чередуется» с другими учреждениями с 8 наградами?
Использование SQL Server 2008, здесь хранимая процедура, которая заказывает конечный результат установить 3 различными способами (проблема наиболее заметно при @Sort = 2), показанной выше:
ALTER PROCEDURE [dbo].[FLAS2_List_Awards_V1]
-- EXECUTE dbo.FLAS2_List_Awards_V1 2
(@Sort int = 1 -- 1 = descending order on TotalAmount
-- 2 = descending order on TotalAwards
-- 3 = ascending order on Institution
)
AS
CREATE TABLE #TempMarkers
(
ID nchar(6) NOT NULL,
Institution nvarchar(255) NOT NULL,
Street nvarchar(255) NULL,
City nvarchar(255) NULL,
State nvarchar(255) NULL,
Zip nvarchar(255) NULL,
Latitude decimal(28, 18) NULL,
Longitude decimal(28, 18) NULL,
TotalAwards decimal(16, 0) NULL,
TotalAmount decimal (16, 0) NULL
)
INSERT INTO #TempMarkers(ID, Institution, Street, City, State, Zip,
Latitude, Longitude, TotalAwards, TotalAmount)
SELECT DISTINCT
C.ID, C.InstitutionName,
NULL AS street, NULL AS city, NULL AS state, NULL AS zip,
NULL As Latitude, NULL As Longitude,
COUNT(DISTINCT o.GrantNumber) as TotalAwards,
SUM(DISTINCT o.TotalObligatedAmount) as TotalAmount
FROM
dbo.FLAS2_Schools2 C
INNER JOIN
dbo.FLAS2_Grants o ON c.id = o.ID
-- where o.ID in (100654,100724)
GROUP BY
C.ID, C.InstitutionName
--,Z.Lat
-- ,Z.Long
UPDATE #TempMarkers
SET Street = x.street,
City = x.city,
State = x.state,
Zip = x.zip
FROM
dbo.FLAS2_Schools2 X
WHERE
X.ID = #TempMarkers.ID
AND X.InstitutionName = #TempMarkers.Institution
UPDATE #TempMarkers
SET Latitude = Z.lat,
Longitude = Z.Long
FROM dbo.ZipCodesPreferred Z
WHERE Z.ZipCode = #TempMarkers.Zip
--SELECT * FROM #TempMarkers
IF @Sort = 1
BEGIN
SELECT DISTINCT
Marker.ID, Marker.Institution,
Marker.Street, Marker.City, Marker.State, Marker.Zip,
Marker.Latitude, Marker.Longitude,
Marker.TotalAmount, Marker.TotalAwards,
Award.GrantNumber as GrantNumber,
Award.TotalObligatedAmount as GrantAmount
FROM
#TempMarkers Marker
INNER JOIN
dbo.FLAS2_Grants Award ON Marker.ID = Award.ID
ORDER BY
Marker.TotalAmount DESC, GrantAmount DESC
FOR XML AUTO, ROOT('root')
END
IF @Sort = 2
BEGIN
SELECT
Marker.ID, Marker.Institution,
Marker.Street, Marker.City, Marker.State, Marker.Zip,
Marker.Latitude, Marker.Longitude,
Marker.TotalAmount, Marker.TotalAwards,
Award.GrantNumber as GrantNumber,
Award.TotalObligatedAmount as GrantAmount
FROM
#TempMarkers Marker
INNER JOIN
dbo.FLAS2_Grants Award ON Marker.ID = Award.ID
ORDER BY
Marker.TotalAmount DESC, GrantAmount DESC
FOR XML AUTO, ROOT('root')
END
IF @Sort = 3
BEGIN
SELECT
Marker.ID, Marker.Institution,
Marker.Street, Marker.City, Marker.State, Marker.Zip,
Marker.Latitude, Marker.Longitude,
Marker.TotalAmount, Marker.TotalAwards,
Award.GrantNumber as GrantNumber,
Award.TotalObligatedAmount as GrantAmount
FROM
#TempMarkers Marker
INNER JOIN
dbo.FLAS2_Grants Award ON Marker.ID = Award.ID
ORDER BY
Marker.Institution, GrantAmount DESC
FOR XML AUTO, ROOT('root')
END
ли маркировать свой ответ, как правильно и, пожалуйста, изменить название, так что другие найдут это легко, когда они ищут для него – Coder