#sql #sql-server #function
#sql #sql-server #функция
Вопрос:
У меня есть стороннее приложение, которое может вызывать скалярную функцию MS-SQL для возврата некоторой сводной информации из таблицы. Я смог вернуть итоговые значения с помощью функции с табличным значением, но приложение не будет использовать функции с табличным значением, поэтому я как бы застрял. Вот пример из таблицы:
Отслеживаемый номер, проектная задача, тип расходов, сумма
1122, 12345-67-89, Расходные материалы, 100
1122, 12345-67-89, Расходные материалы, 150
1122, 12345-67-89, Расходные материалы, 250
1122, 12345-67-89, Разное, 50
1122, 12345-67-89, Разное, 100
1122, 98765-43-21, Общие, 200
1122, 98765-43-21, Конференция, 500
1122, 98765-43-21, Разное, 300
1122, 98765-43-21,Разное, 100
1122, 98765-43-21, Разное, 100
Я хочу суммировать суммы по projectaskaward amp; expenditureType на основе trackingNumber . Вот результат, который я ищу:
Проект / Задача / Награда: 12345-67-89
Тип расходов: расходные материалы
Всего: 500
Проект / Задача / Награда: 12345-67-89
Тип расходов: Разное
Всего: 150
Проект / Задача / Награда: 98765-43-21
Тип расходов: Общие
Всего: 200
Проект / Задача / Награда: 98765-43-21
Тип расходов: конференция
Всего: 500
Проект / Задача / Награда: 98765-43-21
Тип расходов: Разное
Всего: 500
Я был бы признателен за любую помощь, которую кто-либо может оказать, чтобы направить меня в правильном направлении.
Ответ №1:
Скалярные функции MS-SQL возвращают
единственное значение данных типа, определенного в предложении RETURNS http://technet.microsoft.com/en-us/library/ms177499 (v=sql.105).aspx
Может ли ваше приложение анализировать данные из строки? Вы могли бы вернуть свой результат как varchar() и позволить вашему приложению работать с ним?
IF OBJECT_ID (N'dbo.ufnGetSummary', N'FN') IS NOT NULL
DROP FUNCTION ufnGetSummary;
GO
CREATE FUNCTION dbo.ufnGetSummary(@TrackingNumber int)
RETURNS varchar(100)
AS
BEGIN
DECLARE @ret varchar(100);
--
-- your Select here
--
RETURN @ret;
END;
GO
Комментарии:
1. Да, приложение может анализировать данные из возвращаемой строки. Проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, как вычислить сводную информацию на основе projTaskAward amp; expenditureType . Я новичок в SQL. Мне нужны некоторые рекомендации по созданию оператора SELECT и связанного с ним кода, который будет возвращать итоговые результаты, аналогичные моему примеру.
2. ВЫБЕРИТЕ projTaskAward, expenditureType, SUM(сумма) КАК ‘Total’ из таблицы, где trackingNumber = ‘someValue’ группируется по projTaskAward, ExpenditureType
3. Если вам нужно больше работать с T-SQL, я настоятельно рекомендую ознакомиться с этим руководством w3schools.com/sql/default.asp Удачи 🙂