这件事我完全搞不懂,如果有人能帮我,我将不胜感激。
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子句放在几个地方,但总是出错。
先谢谢你。。。