在不了解SQL中的列的情况下创建表



如果事先不知道表到底包含多少列和哪些列,如何创建表?

想法是我有一个表DATA,它有3列:IDNAMEVALUE

我需要的是一种根据NAME的值获得多个值的方法——我不能用简单的WHEREJOIN来实现这一点(因为我稍后在查询中需要其他值——用其他NAME值)。

由于这个表的构造方式,我想PIVOT它,以便将NAME的每个不同值转换为一列,这样在以后的搜索中更容易找到它。

我现在想要的是以某种方式将其保存到一个临时表/变量中,这样我以后就可以使用它来连接另一个查询的结果。。。

例如:

列:

CREATE TABLE MainTab
(
id int, 
nameMain varchar(max),
notes varchar(max)
); 
CREATE TABLE SecondTab
(
id int,
id_mainTab, int,
nameSecond varchar(max),
notes varchar(max)
);
CREATE TABLE DATA
(
id int,
id_second int,
name varchar(max),
value varchar(max)
);

现在,表data:中的一些示例数据

|  id  | id_second_int |     name     |      value      |
|-------------------------------------------------------|
|  1   |     5550      |   number     |   111115550     |
|  2   |     6154      |   address    | 1, First Avenue |
|  3   |     1784      |   supervisor |    John Smith   |
|  4   |     3467      |   function   |    Marketing    |
|  5   |     9999      |   start_date |    01/01/2000   |
::::

现在假设"name"有很多不同的值,在一个查询中,我需要根据"name"的值获得很多不同的数值。。。这就是为什么我将其调整为数字、地址、主管、函数、start_date。。。成为哥伦布。我这样做是动态的,因为可能的列太多了——我需要一段时间才能将所有列都写在"in"语句中——而且我不想每次添加新的"name"值时都记得手动添加。。。所以我跟着http://sqlhints.com/2014/03/18/dynamic-pivot-in-sql-server/

问题是,我希望execute(@query)的结果存储在tempTab/变量中。我想稍后使用它将其与mainTab连接。。。如果我能使用@cols(保存DATA.name的值)那就太好了,但我似乎想不出一种方法来做到这一点。

此外:如果我使用非动态方式(在"IN"之后手动写下所有值),我仍然需要创建一个名为status的列。现在,在这一列中(到目前为止,到处都是NULL,因为该值不存在于我的未分页表中),我希望有"open"或"closed",这取决于日期(假设我有start_date和end_date,

CASE end_date
WHEN end_date < GETDATE() THEN pivotTab.status = 'closed'
ELSE pivotTab.status = 'open'

我可以把这份声明放在哪里?假设我的主要查询如下:

SELECT * FROM(
(SELECT id_second, name, value, id FROM TABLE_DATA) src
PIVOT (max(value) FOR name IN id, number, address, supervisor, function, start_date, end_date, status) AS pivotTab
JOIN SecondTab ON SecondTab.id = pivotTab.id_second
JOIN MainTab ON MainTab.id = SecondTab.id_mainTab
WHERE pivotTab.status = 'closed';

好吧,据我所知,您有一些select语句,只需要将其结果"转储"到某个临时表中。在这种情况下,您可以使用select into语法,如:

select .....
into #temp_table
from ....

这将根据select语句中的列创建临时表,并用select datatement返回的数据填充它。

请参阅MDSN以获取参考。

相关内容

最新更新