如果有人可以帮助我,我将不胜感激。
另一位程序员编写了以下存储过程。我需要对其进行简单的修改。当前,它查询整个数据库。我需要将其限制为在特定日期之后创建的记录。我想在哪里对字段stop_details.record_created>“ 9/1/18'
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[StopVisitsByCustomer]
AS
BEGIN
DECLARE @CUSTOMERNAMES AS VARCHAR(MAX), -- TO FETCH THE UNIQUE CUSTOMER NAME FOR THE PIVOTING
@SQLQRY AS VARCHAR(MAX) -- FOR HOLDING DYNAMIC SQL
SELECT @CUSTOMERNAMES = STUFF((SELECT ',' + QUOTENAME(CUSTOMER_NAME)
FROM CUSTOMERS
GROUP BY CUSTOMER_NAME
ORDER BY CUSTOMER_NAME
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
-- DYNAMIC SQL FOR THE PIVOT QUERY TO RETURN THE DETAILS IN THE DESIRED FORMAT
SET @SQLQRY = 'SELECT
CON_NAME AS ConName,
CON_ADDRESS1 AS Address1,
CON_ADDRESS2 AS Address2,
CON_CITY AS City,
CON_STATE AS State,
CON_ZIP AS Zip, ' + @CUSTOMERNAMES + '
FROM
(SELECT
CON_NAME,
CON_ADDRESS1,
CON_ADDRESS2,
CON_CITY,
CON_STATE,
CON_ZIP,
CUSTOMER_ID,
CUSTOMER_NAME
FROM
STOP_DETAILS
INNER JOIN
CUSTOMERS ON CUSTOMERS.ID = STOP_DETAILS.CUSTOMER_ID) Stops
PIVOT
(COUNT(CUSTOMER_NAME)
FOR CUSTOMER_NAME in (' + @CUSTOMERNAMES + ')
) Customers'
-- EXECUTE THE DYNAMIC SQL FOR GIVING THE OUTPUT
EXECUTE(@SQLQRY);
END
我尝试将where子句放在几个位置,但是不断出现错误。
提前谢谢...
答案 0 :(得分:1)
根据您的请求,您似乎会在WHERE
之后添加INNER JOIN
。另请注意,由于这是一个动态查询,因此您必须将引号加倍:
INNER JOIN CUSTOMERS ON CUSTOMERS.ID = STOP_DETAILS.CUSTOMER_ID
WHERE stop_details.record_created > ''2018-09-01'') Stops