【问题标题】:Combining results from two tables into a unified table without common data将两个表的结果组合成一个没有公共数据的统一表
【发布时间】:2012-11-08 00:10:14
【问题描述】:

我已经阅读了很多关于合并表的示例,但大多数人都有可连接的内容。除了使用 FULL JOIN 之外,我没有任何可以连接的数据,这会留下多个具有相同名称的列和对应查询中没有数据的 NULL。

CREATE TABLE #tmpBus
(
id varchar(50),
partnumber varchar(400),
attributecname nvarchar(255),
attributevalue nvarchar(1700),
assetfilename varchar(85),
orderby varchar(10)
)

CREATE TABLE #tmpBus1
(
id varchar(50),
name varchar(500),
url varchar(2550),
assetfilename varchar(850),
orderby varchar(10)
)

CREATE TABLE #tmpBus2
(
partnumber varchar(400),
attributecname varchar(255),
attributevale varchar(1700),
orderby varchar(10),
assetfilename varchar(850),
name varchar(500),
url varchar(2550)
)

INSERT INTO #tmpBus exec getSectionNewData 5665976;

INSERT INTO #tmpBus1 exec getSectionFeaturedData 5665976;

SELECT DISTINCT * FROM #tmpBus tb
FULL JOIN #tmpBus1 tb1
ON tb.partnumber=tb1.name

DROP TABLE #tmpBus
DROP TABLE #tmpBus1
DROP TABLE #tmpBus2

我的目标是从我创建的 2 个临时表 (#tmpBus & #tmpBus1) 中获取数据到一个统一表 (#tmpBus2) 中。我尝试了我能想到的所有类型的加入和分组方法。这是上述代码输出的屏幕截图。注意 NULL。我正在尝试使用每个表中的相应值将一个平面表放入#tmpBus2。因此,id、assetfilename 和 orderby 字段将统一,而不是 2 个单独的列以及按 orderby 列排序的能力。

任何让我朝着正确方向前进的帮助都会非常有帮助。

【问题讨论】:

标签: sql join insert create-table


【解决方案1】:

如果您只是想将多个列合并为单个列,您可能想试试这个:

SELECT 
--isnull(tb.id, tb1.id)                         Id
  isnull(tb.partnumber, tb1.name)               PartNumber
, tb.attributecname                             AttributeCName
, tb.attributevalue                             AttributeValue
, isnull(tb.orderby, tb1.orderby)               OrderBy
, isnull(tb.assetfilename, tb1.assetfilename)   AssetFilename
, isnull(tb1.name, tb.partnumber)               Name
, tb1.url                                       URL
FROM #tmpBus tb
FULL JOIN #tmpBus1 tb1
ON tb.partnumber=tb1.name

在不了解您的数据/要求的情况下,我无能为力 - 如果您可以提供一些示例输入数据和预期输出,尽管我(或这里的某人)可以调整查询以满足您的需求。

【讨论】:

    【解决方案2】:

    使用简单的 UNION 连接

    SELECT id, partnernumber, attributecname, attributevalue, assetfilename, orderby, NULL AS url
    FROM #tmpBus tb
    UNION
    SELECT id, name, NULL, NULL, assetfilename, orderby, url
    FROM #tmpBus1 tb1
    ORDER BY orderby
    

    【讨论】:

    • 谢谢。在这篇文章之前,我曾尝试过一个 UNION,但不是以你的方式。再次感谢!
    猜你喜欢
    • 2015-03-14
    • 1970-01-01
    • 2023-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    相关资源
    最近更新 更多