2013-09-13 2 views
0

У меня есть две таблицы #temp с одним столбцом Мне нужно перенести оба этих столбца в новую таблицу #temp, переведя один столбец в INT?Объединение одного столбца в две таблицы в другую таблицу с двумя столбцами и преобразование в целое?

#ProductID 
Pid 
4 
7 
8 
9 
23 
88 


#Name 
Name 
tom 
jerry 
harry 
jim 
jack 
jones 

Как можно вставить, чтобы новый темп таблицы с двумя столбцами и изменить столбец #ProductID, чтобы тип данных Int?

Новая таблица температура должна выглядеть следующим образом:

#Temp1 
Pid  name 

4  tom 

7  jerry 

8  harry 

9  jim 

23  jack 

88  jones 

ответ

0

Предполагая 4 идет с «томом» и 7 идет с «канистру» в вашем примере и у вас есть SQL Server 2005 или выше. Вам нужно будет использовать функцию ROW_NUMBER().

Это в основном то, что вам нужно будет сделать. Возможно, вы немного отклонились от ваших двух таблиц.

SELECT 
    ProductID, 
    name 
INTO #Result 
FROM 
(
    SELECT 
     Pid, 
     ROW_NUMBER() OVER (ORDER BY Fake) AS RowID 
    FROM 
    (
     SELECT 
      Pid, 
      1 AS Fake 
     FROM #ProductID 
    ) InnP 
) P 
INNER JOIN 
(
    SELECT 
     Name, 
     ROW_NUMBER() OVER (ORDER BY Fake) AS RowID 
    FROM 
    (
     SELECT 
      Name, 
      1 AS Fake 
     FROM #Name 
    ) InnP 
) N ON N.RowID = P.RowID; 

EDIT: Если исходная температура таблица не была типа INT, то конечный результат будет требовать 'CONVERT (INT, Pid) AS Pid. Я предполагал, что вы также знали, как создать временную таблицу, на всякий случай, если вы не до «FROM» вашего результата, вы можете добавить «INTO #Whatever» или создать временную таблицу раньше времени и «INSERT INTO #Whatever ».

EDIT 2: По-видимому ROW_NUMBER() не позволяет сортировать константой, поэтому запрос становится более сложным ...

+0

: Спасибо iam new sqlbie – vision

0

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

Я предположим, что вы ввели информацию в #Name в заданный заказ, который вы хотите сохранить для будущего использования. Поэтому, чтобы сохранить этот порядок, в таблице должно быть identity column.

CREATE TABLE #Name 
(
    id INT IDENTITY(1,1), 
    [Name] VARCHAR(100) 
) 

После этого вы сможете объединить обе таблицы в одну.

SELECT CONVERT(INT, Pid) AS nPid, [name] 
FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY CONVERT(INT, Pid))as RN , Pid 
    FROM #ProductID) p 
INNER JOIN #Name ON p.RN = id 

пример в Fiddle нельзя использовать временные таблицы из-за характера скрипку, но в остальном это точно, как описано выше.

Смежные вопросы