我已经阅读了一些关于合并表的示例,但大多数人都有可加入的内容。我没有任何可以连接的数据,除非使用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列排序。
让我朝着正确的方向前进的任何帮助都会非常有帮助。
答案 0 :(得分: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
答案 1 :(得分:0)
如果您只想将多个列合并为单个列,则可能需要尝试此操作:
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
在不了解您的数据/要求的情况下,我无能为力 - 如果您可以提供一些示例输入数据&虽然我(或其他人)可以调整查询以满足您的需求,但预期的输出。