Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вычитание двух полей и расчет процента!!!  [new]
EventPromo
Guest
как вернуть таблицу со столбцом в котором будет храниться разница двух других полей таблицы? и тоже самое с процентом!

CREATE PROCEDURE dbo.GetSearchResultsForLoadsByCarrier (
	@carrierId int = NULL,
	@startDate datetime = NULL,
	@endDate datetime = NULL,	
	@sortExpr nvarchar(50) = 'Carrier'
	)
AS
BEGIN
	SET NOCOUNT ON;
	
	IF @sortExpr is null or  LEN(@sortExpr) = 0
		SET @sortExpr = 'Carrier'
	
	Declare @find nvarchar(5)
	Declare @replace nvarchar(5)
	Declare @GrossAmt int
	Declare @GrossPercent int
	Set @find = ''+ char(39) +'' 
	Set @replace = ''+char(39)+char(39)+''
	Set @GrossAmt = CONVERT(int, Cust) - CONVERT(int, Carr)
	Set @GrossPercent = CONVERT(int, Cust) - CONVERT(int, Carr)
		
	DECLARE @sql nvarchar(4000);
	set @sql= 	
	'SELECT 
	Id, 
	Carrier, 
	Cust, 
	Carr,	
	ShipDate,
	(' + CONVERT(nvarchar, @GrossAmt) + ') AS GrossAmt,
	(' + CONVERT(nvarchar, @GrossAmt) + ') AS GrossPercent		  
	ROW_NUMBER() OVER(ORDER BY ' + @sortExpr + ') AS RowNumber 
	FROM ( SELECT 
			l.Id, 
			c.Name AS Carrier, 
			lcg.CustChg AS Cust, 
			lcg.CarrChg AS Carr,			
			li.PickupDate AS ShipDate, 			
	FROM dbo.Loads AS l	
	INNER JOIN dbo.LoadInfo AS li ON l.Id = li.LoadId
	INNER JOIN dbo.LoadCargo AS lcg ON l.Id = lcg.LoadId
	INNER JOIN dbo.LoadCarrier AS lcr ON l.Id = lcr.LoadId 
	INNER JOIN dbo.Carriers AS c ON lcr.CarrierId = c.Id
	WHERE lcr.Carrier = ' + CONVERT(nvarchar, @carrierId)+ ''
		
	
	IF @startDate IS NOT NULL AND @endDate IS NOT NULL
		SELECT @sql = @sql + ' AND li.PickupDate BETWEEN ''' + CONVERT(nvarchar,@startDate) + ''' AND ''' +  CONVERT(nvarchar,@endDate) + ''''
	
	SET @sql = @sql + ') AS x'
	EXEC(@sql)		
END


2 авг 11, 14:56    [11059230]     Ответить | Цитировать Сообщить модератору
 Re: Вычитание двух полей и расчет процента!!!  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
EventPromo,

SELECT t.b-t.a, ltrim(str(t.b-t.a,20,1))+'%' FROM (
SELECT 10.0 AS a, 50.0 b
) t
2 авг 11, 15:00    [11059265]     Ответить | Цитировать Сообщить модератору
 Re: Вычитание двух полей и расчет процента!!!  [new]
eventpromo
Guest
kDnZP,

так а что у меня не правильно с вычитанием?
2 авг 11, 15:11    [11059351]     Ответить | Цитировать Сообщить модератору
 Re: Вычитание двух полей и расчет процента!!!  [new]
Glory
Member

Откуда:
Сообщений: 104751
eventpromo

так а что у меня не правильно с вычитанием?

у вас его не было
Прежде, чем выполнять динамический запрос, вы не имеете привычки проверять его текст ?
2 авг 11, 15:13    [11059374]     Ответить | Цитировать Сообщить модератору
 Re: Вычитание двух полей и расчет процента!!!  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
eventpromo, кстати, выше была типа шутка... если что. Потому как по вашему примеру тяжело понять что вы хотите, особенно с процентами.

Но могу сказать точно - приводить к целому для вычисления разницы ИМХО идея не очень. Потеряете в точности. У вас вообще какие типы полей? И как вычисляется процент? Т.е. относительно чего?
2 авг 11, 15:17    [11059408]     Ответить | Цитировать Сообщить модератору
 Re: Вычитание двух полей и расчет процента!!!  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
eventpromo, и еще одна плохая идея, так писать нельзя, плохо будет:
CONVERT(nvarchar,@startDate)
2 авг 11, 15:19    [11059428]     Ответить | Цитировать Сообщить модератору
 Re: Вычитание двух полей и расчет процента!!!  [new]
Glory
Member

Откуда:
Сообщений: 104751
EventPromo
	Set @GrossAmt = CONVERT(int, Cust) - CONVERT(int, Carr)
	Set @GrossPercent = CONVERT(int, Cust) - CONVERT(int, Carr)
		
	DECLARE @sql nvarchar(4000);
	set @sql= 	
	'SELECT 
	Id, 
	Carrier, 
	Cust, 
	Carr,	
	ShipDate,
	(' + CONVERT(nvarchar, @GrossAmt) + ') AS GrossAmt,
	(' + CONVERT(nvarchar, @GrossAmt) + ') AS GrossPercent		

Вы случайно не думаете, что в динамический запрос должны попасть формулы, по которым вычисляются значения переменных @GrossAmt и @GrossPercent ?
2 авг 11, 15:20    [11059435]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить