我正在使用COVID数据库,我想使用导入文件Last_Update
列中的部分日期,并将其用作该文件中列的别名。
以下是导入文件的示例:
FIPS County Province_State Country_Region Last_Update Lat Long Confirmed Deaths Recovered Active
45001 Abbeville South Carolina US 2020-05-30 02:32:48.00 34.22333378-82.46170658 39 0 0 39
22001 Acadia Louisiana US 2020-05-30 02:32:48.00 30.2950649 -92.41419698 401 23 0 378
51001 Accomack Virginia US 2020-05-30 02:32:48.00 37.76707161-75.63234615 7 12 0 815
这是预期的结果:
Province_State Country_Region 05-30
--------------------------------------
Abruzzo Italy 3237
Acre Brazil 5841
Aguascalientes Mexico 797
Aichi Japan 506
Last_Update
日期列导入为2020-05-30 02:32:48.0000000,我已经使用以下代码为新列标题提取缩短的日期格式,以读取05-30
DECLARE @ColumnName VARCHAR (50)
DECLARE @Date VARCHAR (50)
DECLARE @Query AS NVARCHAR (MAX)
SET @ColumnName = (SELECT TOP 1[Last_Update] FROM [DailyImport5.30.20])
SET @Date = SUBSTRING (@ColumnName,6,6)
PRINT @Date
接下来,我尝试将@Date
的变量传递到新的列标题,但到目前为止没有任何运气:
DECLARE @ColumnA nvarchar(max),
@ColumnB nvarchar(max),
@ColumnC nvarchar(max),
@ColumnName VARCHAR (50),
@Date VARCHAR (50),
@table nvarchar(max),
@sql nvarchar(max)
SET @table = 'DailyImport5.30.20'
SET @ColumnName ='(SELECT TOP 1[Last_Update] FROM [COVIDResearch].[dbo].[DailyImport5.30.20])'
SET @Date = 'SUBSTRING (@ColumnName,6,6)'
SELECT
@ColumnA = N'Province_State',
@ColumnB = N'Salary',
@ColumnC = N'@Date',
@table = N'[COVIDResearch].[dbo].[DailyImport5.30.20]'
SELECT @sql = N'SELECT ' +(@ColumnA)+','+(@ColumnB)+','+(@ColumnC)+ ' FROM '+(@table) +';'
EXEC sp_executesql @sql
我收到此错误:
必须声明标量变量“ @Date”。
我也尝试过PIVOT
,但是无法找到如何读取日期,将日期进行修整,然后对表中的所有结果进行透视。不只是一组指定的结果。
任何建议都将不胜感激!
答案 0 :(得分:1)
亚历克斯给了我最后的解决方案。这是我的最终代码,用于从导入文件中提取日期,将其缩短为仅一个月和一天,然后将其作为列标题插入以便在新表中使用。
df = pd.DataFrame(list_2, columns = ['a', 'b', 'c', 'd', 'Species'])
df = df.astype({"a": float, "b": float, "c": float, "d": float})
list_2 = list(df.values)
感谢您的帮助!
答案 1 :(得分:0)
如果您“打印”查询(通过PRINT @sql
)并将文本复制到新的查询窗口,则会发现它在@Date
列名附近存在语法错误。变量名称不能用作列名称。
您需要为现有数据列提供别名。您要做的是遵循以下几条原则:
.... Omitted for brevity
SELECT
@ColumnA = N'Province_State',
@ColumnB = N'Salary',
-- You need to give an alias to an existing column in [DailyImport5.30.20] table
-- Note: square brackets to avoid invalid identifiers, i.e. you assign value of @Date to @ColumnC.
@ColumnC = 'Confirmed AS [' + @Date + ']',
@table = N'[COVIDResearch].[dbo].[DailyImport5.30.20]'
SELECT @sql = N'SELECT ' +(@ColumnA)+','+(@ColumnB)+','+(@ColumnC)+ ' FROM '+(@table) +';'
EXEC sp_executesql @sql