Ma requête renvoie un résultat plusieurs fois. Je sais que la réponse doit être simple, mais je suis exclu. Toute aide est appréciée.
Mon code est ci-dessous. P>
USE ODS
DECLARE @recalctime AS TIME
DECLARE @portfolio AS VARCHAR(MAX)
DECLARE @loannumber AS BIGINT
DECLARE @zipcode AS VARCHAR(10)
DECLARE @timezone AS VARCHAR(10)
DECLARE @calltime AS TIME
DECLARE @cst AS DATETIME
DECLARE @calldate AS DATETIME
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)
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'
FROM dbo.table r (nolock)
3 Réponses :
Votre première requête effectuera l'affectation de Var local pour chaque ligne du tableau, réécrivez cette valeur pour chaque ligne et en finissant de retenir les valeurs dérivées de la dernière ligne. Votre deuxième requête renvoie ces valeurs autant de fois qu'il y a des lignes. p>
Si vous souhaitez simplement générer vos valeurs dérivées, combinez ces deux requêtes en une seule et n'utilisez pas du tout des variables locales. P>
La première requête attribue aux variables par ligne qui pourraient ne pas être ce que vous essayez de faire.
En général, la plupart des utilisations de la première requête incluraient une clause où les valeurs se produiraient donc d'une ligne spécifique: p> Il n'y a pas besoin dans la deuxième requête pour le "de DBO.table" car cela sélectionnera les variables par enregistrement dans la table. P> 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
Parce que dans le tableau "Dbo.table" dispose de 89 928 lignes totales, c'est-à-dire la raison pour laquelle il montre 89 928 fois.
Vous devez sélectionner uniquement des variables p>
Changer
de dbo.table R code> dans la deuxième requête surà partir dual code>. Vous voulez juste retourner les valeurs des variables une fois, pas une fois pour chaque ligne de la table.Je ne sais pas comment la requête supérieure a couru avec succès si votre table dispose de 89 000 lignes car vous ne semblez pas avoir une clause où, mais pour la requête inférieure, supprimez complètement la clause
de code> de code>. Pour sélectionner uniquement les variables .Je ne crois pas
à partir dual code> est SQL Server. Ou du moins pas SQL 2012 et avant.