Как назначить уникальный номер из таблицы в другой строке таблицы и изменить флаг в SQL Server - PullRequest
0 голосов
/ 17 мая 2018

У меня есть следующий запрос, который получает данные из нескольких таблиц следующим образом

SELECT TOP (1000)
      t.TicketID
      ,gg.[Name]
      ,FA.Phone      
  FROM #testtt gg inner join Market gm on gg.ID=gm.ID inner join MarketOption MO on gm.MarketID=MO.MarketID
  inner join TicketDetail TD  on TD.MarketOptionID=MO.MarketOptionID inner join Ticket t on t.TicketID=td.TicketID inner join Account FA  on t.AccountID=FA.AccountID

, что дает мне следующий результат

Ticket   |Name  | Number
35689    |Jane  |1259876325
78963    |Austin|7893256941
15896    |Raj   |4589623597

Теперь у меня есть таблица следующего генератора, которая содержит около 500 строк

  ID| Number  | Flag
   1 | SD78569 | 0
   2 | 45G7y42 | 0
   3 | 7U5Gt56 | 0
   4 |F5Nhy45  | 0
   5 |153F786  | 0

я пытаюсь добиться того, чтобы я хотел назначить число из таблицы генератора с флагом 0 для запроса, который был выполнен, например, это мой ожидаемый результат

Ticket   |Name  | Phone     |Number      
35689    |Jane  |1259876325 |SD78569
78963    |Austin|7893256941 |7U5Gt56
15896    |Raj   |4589623597 |F5Nhy45

после присвоения номера флаг должен измениться на 1 в таблице генератора

Number  | Flag
SD78569 | 1
45G7y42 | 0
7U5Gt56 | 1
F5Nhy45 | 1
153F786 | 0

Я немного сбит с толку относительно того, как этого добиться, поскольку я не знаю, как мне присоединиться к этим столам, поскольку для меня нет критериев присоединиться и изменить флаг, ваше руководство будет оценено.

Я пытался сделать что-то вроде этого, где я добавил временную таблицу в

 IF OBJECT_ID('TempDB..#results') IS NOT NULL  
BEGIN
    DROP TABLE #results
END
SELECT TOP (1000)
          t.TicketID
          ,gg.[Name]
          ,FA.Phone 
          ,cast (null as nvarchar(25)) as GeneratorNumber // created a column to add the Number
into #Results    
      FROM #testtt gg inner join Market gm on gg.ID=gm.ID inner join MarketOption MO on gm.MarketID=MO.MarketID
      inner join TicketDetail TD  on TD.MarketOptionID=MO.MarketOptionID inner join Ticket t on t.TicketID=td.TicketID inner join Account FA  on t.AccountID=FA.AccountID
insert into  #results(GeneratorNumber)
select Number from dbo.Generator  // i tried copying it like this but it gives me an error "cannot insert the value Null into Column" and then i am not sure how to update the flag for the fields that where copied.
    where flag=0 

// попытка

;With UpdateData AS (
Select GeneratorNumber,
ROW_NUMBER() over (ORDER BY [GeneratorNumber] DESC) AS RN
FROM #results
)
 update #results  set GeneratorNumber=Number
 from dbo.Generator dg
 inner join UpdateData on UpdateData.RN=dg.ID
    select * from #results

Ticket   |Name  | Number    |GeneratedNumber
35689    |Jane  |1259876325 |SD78569
78963    |Austin|7893256941 |153F786
15896    |Raj   |4589623597 |SD78569
75663    |kate  |7893256452 |153F786  // as you can see its repeating the same numbers over and over i wanted it to use distinct numbers for each row
...