экспортируйте таблицу в файл с заголовками столбцов (имена столбцов) с помощью утилиты bcp и SQL Server 2008

Используйте .value_counts() с аргументом нормализации, группируя только по году.

Пример данных

import pandas as pd
import numpy as np

np.random.seed(123)
df = pd.DataFrame({'year': np.random.choice([2010, 2011], 1000),
                   'weekday': np.random.choice(list('abcdefg'), 1000),
                   'val': np.random.normal(1, 10, 1000)})

Код:

df.groupby('year').weekday.value_counts(normalize=True)

Выход:

year  weekday
2010  d          0.152083
      f          0.147917
      g          0.147917
      c          0.143750
      e          0.139583
      b          0.137500
      a          0.131250
2011  d          0.182692
      a          0.163462
      e          0.153846
      b          0.148077
      c          0.128846
      f          0.111538
      g          0.111538
Name: weekday, dtype: float64
35
задан Dylan Hogg 18 March 2012 в 00:11
поделиться

4 ответа

DECLARE @table_name varchar(max)='tableName'--which needs to be exported
DECLARE @fileName varchar(max)='file Name'--What would be file name

DECLARE @query varchar(8000)
DECLARE @columnHeader VARCHAR(max)
SELECT @columnHeader = COALESCE(@columnHeader+',' ,'')+ ''''+column_name +''''  FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @table_name

DECLARE @ColumnList VARCHAR(max)
SELECT @ColumnList = COALESCE(@ColumnList+',' ,'')+ 'CAST('+column_name +' AS VARCHAR)' +column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @table_name

DECLARE @tempRaw_sql nvarchar(max)
SELECT @tempRaw_sql = 'SELECT ' + @ColumnList + ' into ##temp11 FROM ' + @table_name 
PRINT @tempRaw_sql
EXECUTE sp_executesql  @tempRaw_sql


DECLARE @raw_sql nvarchar(max)
SELECT @raw_sql = 'SELECT  '+ @columnHeader +' UNION ALL SELECT * FROM ##temp11'
PRINT @raw_SQL
SET @query='bcp "'+@raw_SQL+'" queryout "C:\data\'+@fileName+'.txt" -T -c -t,'
EXEC xp_cmdshell @query


DROP TABLE ##temp11
0
ответ дан 27 November 2019 в 06:28
поделиться

Некоторые решения здесь чрезмерно сложны. Вот один с 4 строками кода, никакими пакетными файлами, никакими внешними приложениями и всеми автономными в SQL-сервере.

В этом примере, мою таблицу называют "MyTable", и это имеет два столбца по имени Column1 и Column2. Column2 является целым числом, таким образом, мы должны БРОСИТЬ его к varchar для экспорта:

DECLARE @FileName varchar(100)
DECLARE @BCPCommand varchar(8000)
DECLARE @ColumnHeader varchar(8000)

    SET @FileName = 'C:\Temp\OutputFile.csv'
 SELECT @ColumnHeader = COALESCE(@ColumnHeader+',' ,'')+ ''''+column_name +'''' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='MyTable'
    SET @BCPCommand = 'bcp "SELECT '+ @ColumnHeader +' UNION ALL SELECT Column1, CAST(Column2 AS varchar(100)) AS Column2 FROM MyTable" queryout "' + @FileName + '" -c -t , -r \n  -S . -T'
   EXEC master..xp_cmdshell @BCPCommand

Вы могли добавить это к хранимой процедуре, чтобы полностью автоматизировать Ваш.CSV файл (со строкой заголовка) создание.

0
ответ дан 27 November 2019 в 06:28
поделиться

Помимо решения от marc_s, вы также можете использовать osql или sqlcmd

. Сюда входят заголовки, и он может действовать как bcp, используя -Q и -о. Однако они не поддерживают файлы формата, такие как bcp.

2
ответ дан 27 November 2019 в 06:28
поделиться

Насколько мне известно, BCP экспортирует только данные - я не думаю, что есть какой-либо способ заставить его экспортировать строку заголовка с именами столбцов.

Один распространенный метод, который используется для решить эту проблему - использовать представление ваших фактических данных для экспорта, которое в основном выполняет UNION ALL для двух операторов:

  • первый оператор, возвращающий одну строку с заголовками столбцов
  • фактические данные для экспорта

], а затем используйте bcp в этом представлении вместо непосредственной базовой таблицы данных.

Marc

2
ответ дан 27 November 2019 в 06:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: