Возможно ли заставить скалярную функцию MS-SQL сделать это?

#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 Удачи 🙂