Почему мои предложения здесь проигнорированы, они суммируют счета-фактуры, независимо от значений, введенных в качестве параметров, потраченных на это часов и безумных!Как использовать предложение WHERE с помощью PIVOT
ALTER PROCEDURE [dbo].[Usp_custom_dash_metric_invoicespend]
@CompanyGUID UNIQUEIDENTIFIER,
@UserGUID UNIQUEIDENTIFIER,
@CompanyUserGUID UNIQUEIDENTIFIER,
@InvoiceYearFrom CHAR(4),
@InvoiceYearTo CHAR(4),
@CompanySupplierGUID UNIQUEIDENTIFIER
AS
BEGIN
WITH _d
AS (SELECT a.totalgrossvaluehome1 AS tgvh1,
invoicedate AS ind,
c.guid AS cug,
a.companysupplierguid AS cus,
c.userguid AS ug,
b.guid AS cg
FROM invoices a (nolock)
JOIN companies b (nolock)
ON (a.companyguid = b.guid)
JOIN companyusers c (nolock)
ON (c.userguid = a.createdbyguid)
WHERE a.invoicedate BETWEEN Cast(Isnull(NULL, Cast(Datepart(year
,
Dateadd(
year, -1,
Getdate()))AS NVARCHAR(
max
)))
+ '-01-01' AS DATETIME) AND
Cast(
Isnull(NULL, Cast(Datepart(year,
Getdate()
)AS
NVARCHAR(max)))
+ '-12-31' AS DATETIME)
AND c.guid = @CompanyUserGUID
OR @CompanyUserGUID IS NULL
AND a.companysupplierguid = @CompanySupplierGUID
OR @CompanySupplierGUID IS NULL
AND c.userguid = @UserGUID
OR @UserGUID IS NULL
AND a.companyguid = @CompanyGUID
OR @CompanyGUID IS NULL)
SELECT *
FROM (SELECT Year(ind) AS [ayear],
LEFT(Datename(month, ind), 3)AS [amonth],
Isnull(tgvh1, 0) AS Amount
FROM _d
WHERE cug = @CompanyUserGUID
OR @CompanyUserGUID IS NULL
AND cus = @CompanySupplierGUID
OR @CompanySupplierGUID IS NULL
AND ug = @UserGUID
OR @UserGUID IS NULL
AND cg = @CompanyGUID
OR @CompanyGUID IS NULL)s
PIVOT (Sum(amount)
FOR [amonth] IN (jan,
feb,
mar,
apr,
may,
jun,
jul,
aug,
sep,
oct,
nov,
dec))AS pivotal
WHERE pivotal.ayear >= Isnull(@InvoiceYearFrom, Datepart(year,
Dateadd(year, -1,
Getdate()
)))
AND pivotal.ayear <= Isnull(@InvoiceYearTo, Datepart(year, Getdate(
))
)
ORDER BY [ayear]
END
Именно этот бит конкретно:
WHERE a.invoicedate BETWEEN Cast(Isnull(@InvoiceDateFrom, Cast(Datepart(year
,
Dateadd(
year, -1,
Getdate()))AS NVARCHAR(
max
)))
+ '-01-01' AS DATETIME) AND
Cast(
Isnull(@InvoiceDateTo, Cast(Datepart(year,
Getdate()
)AS
NVARCHAR(max)))
+ '-12-31' AS DATETIME)
AND c.guid = @CompanyUserGUID
OR @CompanyUserGUID IS NULL
AND a.companysupplierguid = @CompanySupplierGUID
OR @CompanySupplierGUID IS NULL
AND c.userguid = @UserGUID
OR @UserGUID IS NULL
AND a.companyguid = @CompanyGUID
OR @CompanyGUID IS NULL)
например, данные, возвращаемые в оси подытоживает все данные (я предполагал, потому что он принимает данные от CTX, что она будет включать в себя отфильтрованные данные, поэтому я ожидал бы, если бы я прошел через @Userguid = (реальный идентификатор пользователя), это ограничило бы счетные счета счетами только для пользователя ... это не: '(
При выполнении запроса без шарнирной части вы возвращаетесь правильным с ИНЕК? – Taryn
Да, данные, возвращенные из CTX, фильтруются правильно. –