使用sys.columns查找SQL表值

时间:2017-04-05 15:33:27

标签: sql-server sql-like dynamic-sql lookup-tables

所以,让我们说我有超市的数据告诉我每种类型的水果已售出多少,我想知道每个超市销售的红色和绿色水果的总数。我有3张桌子:

表1是一个临时表,显示每个超市销售的水果数量,并且具有分配给变量列名称的值:

╔═══════╦════════╦════════╗
║ Apple ║ Banana ║ Cherry ║
╠═══════╬════════╬════════╣
║     1 ║      5 ║      7 ║
║     3 ║      0 ║      4 ║
╚═══════╩════════╩════════╝

表2是一个永久性表格,在第一列中包含我想要的列名,以及我需要查找哪些文本(例如,我不想要黄色水果,所以我不想要香蕉' s要导入的值):

╔═══════╦════════════╦══════════╗
║ Colour║  Lookup 1  ║ Lookup 2 ║
╠═══════╬════════════╬══════════╣
║ Red   ║ Apple      ║ Cherry   ║
║ Green ║ Watermelon ║ Kiwi     ║
╚═══════╩════════════╩══════════╝

表3是我的最终永久性表格,其中包含我想要的列和值:

╔═════════════╦═════╦═══════╗
║ Supermarket ║ Red ║ Green ║
╠═════════════╬═════╬═══════╣
║ Temco       ║   6 ║     8 ║
║ ASPA        ║   2 ║     4 ║
║ Sansbrys    ║   2 ║     1 ║
║ Morris      ║   5 ║     3 ║
╚═════════════╩═════╩═══════╝

使用表2中的值查找表1中列名的最佳方法是什么,然后将我想要的值插入表3中?

我已经到了这个阶段,这个过程的后半部分没有使用查找表2但完全停留在上半部分:

declare @sql nvarchar(max),
        @Columns nvarchar(2000)
declare @table nvarchar(256) = '[etl].[Temco]'
truncate table etl.Supermarkets
SELECT @Columns = COALESCE(@Columns + ', ', '') + quotename(column_name)
from information_schema.columns 
where table_name= 'Temco' and (column_name like '%Apple%' OR COLUMN_NAME LIKE '%Cherry%')
PRINT @Columns
set @Columns = left(@Columns,len(@Columns)-1) -- remove trailing comma
set @sql = ' insert into [etl].[Supermarkets]
 ([Red])
 SELECT ' + @Columns + '] from  ' +@table+' '
PRINT @sql
EXECUTE sp_executesql @sql, N'@table nvarchar(256)',
@table = @table 

0 个答案:

没有答案