【问题标题】:Joining single column two tables in to another table with two columns and Converting in to Integer?将单列两个表连接到另一个具有两列的表并转换为整数?
【发布时间】:2013-09-13 18:30:10
【问题描述】:

我有两个带有单列的 #temp 表,我需要通过将一列转换为 INT 来将这两列转移到新的 #temp 表中吗?

#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

【问题讨论】:

    标签: sql-server tsql sql-server-2008-r2 temp


    【解决方案1】:

    假设在您的示例中 4 与“tom”一起使用,7 与“jerry”一起使用,并且您拥有 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;
    

    编辑:如果您的原始临时表不是 INT 类型,那么最终结果将需要“CONVERT(INT, Pid) AS Pid”。我假设您还知道如何创建临时表,以防万一您在结果的“FROM”之前不知道,您可以添加“INTO #Whatever”或提前创建临时表和“INSERT INTO #Whatever” '。

    编辑 2:显然 ROW_NUMBER() 不允许您按常量排序,因此查询变得更加复杂...

    【讨论】:

    • :谢谢 iam new sqlbie
    【解决方案2】:

    如果表中没有排序键,则无法确保您可以按照插入的顺序检索那里的信息。

    我假设您以给定的顺序将信息插入到#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 中的示例由于 fiddle 的性质而不能使用临时表,否则与上述完全相同。

    【讨论】:

      猜你喜欢
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-26
      • 2019-02-05
      • 1970-01-01
      相关资源
      最近更新 更多