В первом запросе присваиваются переменные для каждой строки, что может не соответствовать тому, что вы пытаетесь сделать.
Как правило, в большинстве случаев использования первого запроса используется предложение where, поэтому значения будут взяты изконкретная строка:
SELECT
@portfolio = CASE
WHEN r.PortfolioID = '10' THEN 'A'
WHEN r.portfolioid = '11' THEN 'B'
WHEN r.PortfolioID = '12' THEN 'C'
ELSE CAST(r.portfolioid AS VARCHAR)
END
, @calldate = CAST(r.RowCreatedDate AS DATE)
, @loannumber = r.loannumber
, @zipcode = r.zipcode
, @timezone = r.zone
, @calltime = CONVERT(char(10), r.contacttime, 108)
, @recalctime = CASE
WHEN r.Zone = 'PST' THEN DATEADD(HOUR, -3, r.contacttime)
WHEN r.Zone = 'CST' THEN DATEADD(HOUR, -1, r.contacttime)
WHEN r.Zone = 'EST' THEN r.contacttime
WHEN r.Zone = 'MST' THEN DATEADD(HOUR, -2, r.contacttime)
ELSE CONVERT(char(10), r.contacttime, 108)
END
FROM dbo.table r (nolock)
WHERE [MyColumn] = something
Во втором запросе «from dbo.table» нет необходимости, поскольку при этом будут выбраны переменные для каждой записи в таблице.
SELECT
@portfolio AS 'Product'
, @loannumber AS 'Loan Number'
, CAST(@calldate AS DATE) AS 'Call Date'
, @zipcode AS 'Zip Code'
, CONVERT(char(10), @calltime, 108) AS 'Timezone'
, CONVERT(char(10), @recalctime, 108) AS 'Call Time'
, DATEPART(hh, @recalctime)
, @timezone AS 'Recalc Time'
;
Если вы не используете переменные для чего-либо еще, вы можете объединить все это в один запрос:
SELECT
[Product] = CASE
WHEN r.PortfolioID = '10' THEN 'A'
WHEN r.portfolioid = '11' THEN 'B'
WHEN r.PortfolioID = '12' THEN 'C'
ELSE CAST(r.portfolioid AS VARCHAR)
END
-- Note you can also use the 'AS' syntax depending on version of sql server
, CAST(r.RowCreatedDate AS DATE) AS 'Call Date'
...etc
FROM dbo.table r (nolock)
WHERE [MyColumn] = something