这是我用来创建表变量的代码
DECLARE @attribute_table
TABLE (attributeId VARCHAR(100) NOT NULL, EventId VARCHAR(100) NOT NULL, EVENT_TEACHERS VARCHAR(100) NOT NULL);
INSERT INTO @attribute_table
SELECT attributeID, EventId, attributeValue as EVENT_TEACHERS
FROM dbo.retreatSuiteEventAttributes
WHERE attributeName LIKE '%EVENT_TEACHERS%'
select t1.attributeId, t1.EventId, i.EVENT_TEACHERS
from @attribute_table t1
outer apply dbo.teacherstring3(t1.EVENT_TEACHERS, '|') i
(teacherstring3是一个将EVENT_TEACHER值基本上拆分为不同行并删除了分隔符的函数)
我得到的答案只是修改上面的select语句。我想要的是将该语句的结果加入(或与之集成)到下面完整显示的主select语句。
我想使用具有作用于其上的功能的列-> i.EVENT_TEACHERS(FK)列连接到另一个(永久)表,该表在下面所示的SELECT语句中具有相应的TeacherIds(PK)。 我该怎么做?
这是创建表变量后我要执行的完整查询(我将同时执行它们)。它不起作用,在GROUP附近我也得到了不正确的语法。
SELECT FORMAT(b.eventStartDate, 'd') as 'Start Date',
dbo.CategoryString(CAST(attributeValue as VARCHAR)) as Categories,
b.EventName as 'Event Name',
d.FirstName + ' ' + d.LastName as Teacher,
b.spacesAvailable as Capacity,
SUM(a.numberOfPlaces) as 'Participants',
FORMAT(CAST(SUM(a.numberOfPlaces) as FLOAT)/CAST(b.spacesAvailable as FLOAT), 'p') as Occupancy,
FORMAT(SUM(a.totalCost), 'C') as Cost,
FORMAT(SUM(a.totalPaid), 'C') as Paid,
FORMAT(SUM(a.discountAmount), 'C') as Scholarships,
FORMAT(SUM(a.Donation), 'C') as Gifts,
FORMAT(SUM(a.totalPaid)/SUM(a.numberOfPlaces), 'C') as 'Revenue Per Seat'
FROM [dbo].[RetreatSuiteRegistrations] a join [dbo].[RetreatSuiteEvents] b on a.EventId = b.EventId AND a.registrationStatusId=1 AND b.spacesAvailable > 0
JOIN [dbo].[RetreatSuiteEventAttributes] c on a.EventId = c.EventId AND c.attributeName='EVENT_CATEGORIES'
JOIN @attribute_table t1 outer apply dbo.teacherstring3(t1.EVENT_TEACHERS, '|') i
JOIN [dbo].[RetreatSuiteTeacher] d on i.EVENT_TEACHERS = d.TeacherID
GROUP BY b.eventStartDate, dbo.CategoryString(CAST(attributeValue as VARCHAR)), b.EventName, d.FirstName + ' ' + d.LastName, b.spacesAvailable
ORDER BY b.eventStartDate desc
DROP Function IF EXISTS CategoryString
go
答案 0 :(得分:0)
也许只需添加一个哑子查询,如:
SELECT
FORMAT(b.eventStartDate, 'd') AS [Start Date]
, dbo.CategoryString(CAST(attributeValue AS VARCHAR)) AS Categories
, b.EventName AS [Event Name]
, d.FirstName + ' ' + d.LastName AS Teacher
, b.spacesAvailable AS Capacity
, SUM(a.numberOfPlaces) AS Participants
, FORMAT(CAST(SUM(a.numberOfPlaces) AS FLOAT) / CAST(b.spacesAvailable AS FLOAT), 'p') AS Occupancy
, FORMAT(SUM(a.totalCost), 'C') AS Cost
, FORMAT(SUM(a.totalPaid), 'C') AS Paid
, FORMAT(SUM(a.discountAmount), 'C') AS Scholarships
, FORMAT(SUM(a.Donation), 'C') AS Gifts
, FORMAT(SUM(a.totalPaid) / SUM(a.numberOfPlaces), 'C') AS [Revenue Per Seat]
FROM dbo.RetreatSuiteRegistrations a
JOIN dbo.RetreatSuiteEvents b ON a.EventId = b.EventId
AND a.registrationStatusId = 1
AND b.spacesAvailable > 0
JOIN dbo.RetreatSuiteEventAttributes c ON a.EventId = c.EventId
AND c.attributeName = 'EVENT_CATEGORIES'
JOIN (SELECT
t1.attributeId
, t1.EventId
, i.EVENT_TEACHERS
FROM @attribute_table t1
OUTER APPLY dbo.teacherstring3(t1.EVENT_TEACHERS, '|') i ) AS MyTest ON c.EventId = MyTest.EVENT_TEACHERS
JOIN dbo.RetreatSuiteTeacher d ON MyTest.EVENT_TEACHERS = d.TeacherID
GROUP BY
b.eventStartDate
, dbo.CategoryString(CAST(attributeValue AS VARCHAR))
, b.EventName
, d.FirstName + ' ' + d.LastName
, b.spacesAvailable
ORDER BY b.eventStartDate DESC;
DROP FUNCTION IF EXISTS CategoryString;
GO