Как я могу вернуть столбцы из объединения при использовании предложения group by? - PullRequest
0 голосов
/ 15 декабря 2018

Я пытаюсь вернуть t1.firstname, t1.lastname, t1.city, t1.stateprovince, и я хотел бы вернуть t2.amount, t2.restaurantname, t2.restaurantnum, t2.datekey и t2.amountа также.

Вот мой код:

SELECT DISTINCT 
    t1.[FirstName] AS FirstName,
    t1.[LastName] AS LastName,
    t1.[City] AS City,
    t1.[StateProvince] AS StateProvince
FROM 
    Database.dbo.CustomerData t1
JOIN 
    (SELECT DISTINCT
         MAX(t2.[Amount]) AS Amount,
         MAX(t2.[Account]) AS Account,
         MAX(t2.[CardNumber]) AS CardNumber,
         MAX(t2.[RestaurantNum]) AS RestaurantNum,
         MAX(t2.[RestaurantName]) AS RestaurantName,
         MAX(t2.[DateKey]) AS DateKey,
         SUM([t2].[Amount]) AS Total_Spend
     FROM 
         gift.TransactionItems t2
     GROUP BY 
         t2.[Amount],
         t2.[RestaurantNum],
         t2.[RestaurantName],
         t2.[DateKey],
         t2.[AccountID],
         t2.[TransactionID]) t2 ON t1.[CardNumber] = t2.[CardNumber]
WHERE
    [FirstName] IS NOT NULL
    AND [LastName] IS NOT NULL
    AND [EmailFailed] IS NULL       
    AND [IsRegistered] = 'Yes'
    AND [DateKey] BETWEEN 20180601 AND 20181213
    AND t2.[Account] = 'Dollars_Spent_Accrued'

Возможно ли это?В настоящее время он возвращает только t1.firstname, t1.lastname, t1.city и t1.stateprovince.

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

В первой части вашего запроса перечислены значения, которые будут возвращены.Вы только перечислили значения от t1, несмотря на то, что столбцы с t2 включены в сегмент FROM вашего запроса.Вам необходимо явно добавить их в сегмент SELECT запроса.Дайте мне знать, если это работает для вас.

SELECT DISTINCT 
    t1.[FirstName] AS FirstName,
    t1.[LastName] AS LastName,
    t1.[City] AS City,
    t1.[StateProvince] AS StateProvince
    t2.[amount], 
    t2.[restaurantname], 
    t2.[restaurantnum], 
    t2.[datekey]
FROM 
    Database.dbo.CustomerData t1
JOIN 
    (SELECT DISTINCT
         MAX(t2.[Amount]) AS Amount,
         MAX(t2.[Account]) AS Account,
         MAX(t2.[CardNumber]) AS CardNumber,
         MAX(t2.[RestaurantNum]) AS RestaurantNum,
         MAX(t2.[RestaurantName]) AS RestaurantName,
         MAX(t2.[DateKey]) AS DateKey,
         SUM([t2].[Amount]) AS Total_Spend
     FROM 
         gift.TransactionItems
     GROUP BY 
         t2.[Amount],
         t2.[RestaurantNum],
         t2.[RestaurantName],
         t2.[DateKey],
         t2.[AccountID],
         t2.[TransactionID]) t2 ON t1.[CardNumber] = t2.[CardNumber]
WHERE
    [FirstName] IS NOT NULL
    AND [LastName] IS NOT NULL
    AND [EmailFailed] IS NULL       
    AND [IsRegistered] = 'Yes'
    AND [DateKey] BETWEEN 20180601 AND 20181213
    AND t2.[Account] = 'Dollars_Spent_Accrued'
0 голосов
/ 15 декабря 2018

Если запрос не работает, когда вы добавляете столбцы, тогда я бы поместил запрос t2 во временную таблицу, затем выполнил объединение и посмотрел, работает ли он лучше.После определенного уровня сложности я обычно выбираю временные таблицы и выкладываю вещи:

drop table if exists #t2
SELECT DISTINCT
         MAX(t2.[Amount]) AS Amount,
         MAX(t2.[Account]) AS Account,
         MAX(t2.[CardNumber]) AS CardNumber,
         MAX(t2.[RestaurantNum]) AS RestaurantNum,
         MAX(t2.[RestaurantName]) AS RestaurantName,
         MAX(t2.[DateKey]) AS DateKey,
         SUM([t2].[Amount]) AS Total_Spend
     INTO #t2 FROM 
         gift.TransactionItems t2
     GROUP BY 
         t2.[Amount],
         t2.[RestaurantNum],
         t2.[RestaurantName],
         t2.[DateKey],
         t2.[AccountID],
         t2.[TransactionID]
...