结合多个查询&返回

时间:2015-10-23 12:37:05

标签: sql-server

我有一个.csv文件,其中包含100个product_ids的列表。我有一个SQL Server表(其中包括product_id列(4000+ ids)和product_description列。

我想要做的是获取.CSV product_ids列表并在表格上运行查询以返回相关product_description的列表。

所以我的简单查询将是

select product_description 
from tablename 
where product-id = xxxxxxx.

但是如何将xxxxxx作为列表提供(也许我只是用逗号分隔?)并将输出转储到另一个csv中。

1 个答案:

答案 0 :(得分:0)

您不能只将CSV中的ID复制+粘贴到查询中吗?

SELECT
    product_id
    , product_description
FROM <table>
WHERE product_id in (<<list of values from CSV>>).

由于它们已经是CSV格式,因此它们应以逗号分隔,因此您可以轻松地将它们插入查询中(如果使用文本编辑器打开文件)。

或者,您可以从SQL执行所有操作,如下所示:

CREATE TABLE #TempTable (
    ID integer
    , col2 ..
    , col3 ..
    etc. )
GO

BULK INSERT #TempTable
    FROM 'C:\..\file.csv'
    WITH
    (
    FIRSTROW = 2,           -- in case the first row contains headers (otherwise just remove this line)
    FIELDTERMINATOR = ',',  -- default CSV field delimiter
    ROWTERMINATOR = '\n',   
    ERRORFILE = 'C:\CSVDATA\SchoolsErrorRows.csv',
    TABLOCK
    )

然后运行:

SELECT
    product_id
    , product_description
FROM <table>
WHERE product_id in (SELECT ID FROM #TempTable)

如果您想将此结果导出到另一个CSV,那么:

INSERT INTO OPENROWSET(
     'Microsoft.ACE.OLEDB.12.0'
    ,'Text;Database=D:\;HDR=YES;FMT=Delimited'
    ,'SELECT
          product_id
        , product_description
      FROM <table>
      WHERE product_id in (SELECT ID FROM #TempTable)' )