Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以转置表格';s条目并将其存储到SQL Server中的临时表中?_C#_Sql_Sql Server - Fatal编程技术网

C# 是否可以转置表格';s条目并将其存储到SQL Server中的临时表中?

C# 是否可以转置表格';s条目并将其存储到SQL Server中的临时表中?,c#,sql,sql-server,C#,Sql,Sql Server,我想将表中的数据转换为powerBI,并在powerBI中进行一些绘图 以下是我从应用程序中对数据库的感受: using (SqlCommand cmd = connect.CreateCommand()) { cmd.CommandText = @"INSERT INTO PoD_NewPriceList_Data (ID, Product_Barcode, Product_Name,

我想将表中的数据转换为powerBI,并在powerBI中进行一些绘图

以下是我从应用程序中对数据库的感受:

using (SqlCommand cmd = connect.CreateCommand())
{
    cmd.CommandText = @"INSERT INTO PoD_NewPriceList_Data
                                        (ID, Product_Barcode, Product_Name,
                                         Store_Price, Internet_Price, InsertDate)
                        VALUES (@ID, @Product_Barcode, @Product_Name,
                                @Store_Price, @Internet_Price, @InsertDate)";

    cmd.Parameters.Add("Product_Barcode", SqlDbType.NVarChar).Value = barcode;
    cmd.Parameters.Add("Product_Name", SqlDbType.NVarChar).Value = PriceList.name;
    cmd.Parameters.Add("Store_Price", SqlDbType.Float).Value = Convert.ToDouble(storePrice, CultureInfo.InvariantCulture);
    cmd.Parameters.Add("Internet_Price", SqlDbType.Float).Value = Convert.ToDouble(PriceList.price, CultureInfo.InvariantCulture);
    cmd.Parameters.Add("InsertDate", SqlDbType.DateTime).Value = InsertDate.AddDays(2);
    cmd.Parameters.Add("ID", SqlDbType.Int).Value = barcode.GetHashCode();

    result = result && (cmd.ExecuteNonQuery() > 0);
}
在SQL Server Management Studio中,我的表是这样的:

SELECT 
    [ID], [Product_Barcode], [Product_Name],
    [Store_Price], [Internet_Price], [InsertDate]
FROM 
    [dbo].[PoD_NewPriceList_Data]
我得到以下输出:

主要问题是,当尝试按照PowerBI中的要求创建绘图时,我需要的数据如下所示:

                    F5321
    Product_Name    Sony Xperia...
    Store_Price     399
    Internet_Price  327.51
    InsertDate      2017.04.27

任何帮助都将不胜感激。

检查并修改此SQL脚本。我使用
@t
表变量,将其替换为表名
[PoD\u NewPriceList\u Data]

DECLARE @t TABLE (
id int,
product_barcode varchar(max),
product_name varchar(max),
store_price int,
internet_price decimal,
insert_date date
)

INSERT INTO @t VALUES (1,'F5321', 'Sony Xperia', 399, 255.1, '2017-04-25')
INSERT INTO @t VALUES (2,'F5833', 'Sony Xperia XZ', 458, 398.2, '2017-04-26')
INSERT INTO @t VALUES (3,'F5121', 'Sony Xperia XA Rose', 161, 155.6, '2017-04-27')

IF OBJECT_ID ('tempdb..#Unpivoted') IS NOT NULL
   DROP TABLE #Unpivoted
IF OBJECT_ID ('tempdb..#Transposed') IS NOT NULL
   DROP TABLE #Transposed

/* Unpivot table to get rows instead of columns */
SELECT *, ROW_NUMBER() OVER (ORDER BY (SELECT 0)) as rn
INTO #Unpivoted
FROM (SELECT product_barcode, product_name, 
      CAST(store_price as varchar(max))  store_price,
      CAST(internet_price as varchar(max))  internet_price, 
      CAST(insert_date as varchar(max)) as insert_date
      FROM @t) src
UNPIVOT (
    value FOR field IN (
        product_barcode, product_name, store_price, internet_price, insert_date
    )
) unpiv

CREATE TABLE #Transposed 
(Field varchar(50) PRIMARY KEY NOT NULL )

DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL = STUFF((
    SELECT 'ALTER TABLE #Transposed ADD item' + 
    RIGHT('000' + CAST(sv.number AS VARCHAR(3)), 3) + ' varchar(max) '
    FROM [master].dbo.spt_values sv
    WHERE sv.[type] = 'p'
        AND sv.number BETWEEN 1 AND (SELECT COUNT(*) FROM @t)
    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 0, '') 

Exec(@SQL)  /* Dynamically create columns */

INSERT INTO #Transposed (Field)  SELECT DISTINCT Field FROM #Unpivoted 
/*populate field names*/
DECLARE @fieldCount int = (SELECT COUNT(*) FROM #Transposed)

/* using rn to filter proper record from transposed table */
SELECT @SQL = STUFF((
    SELECT '
    UPDATE #Transposed SET item' + RIGHT('000' + CAST(sv.number AS VARCHAR(3)), 3) 
    + ' = up.value FROM #Transposed t  CROSS APPLY 
    ( SELECT TOP 1 u.value FROM  #unpivoted u WHERE u.field = t.field AND u.rn > ' 
    + CAST((sv.number-1)*@fieldCount AS VARCHAR(10)) + ' ORDER BY rn) up  '
      FROM [master].dbo.spt_values sv
      WHERE sv.[type] = 'p'
        AND sv.number BETWEEN 1 AND (SELECT COUNT(*) FROM @t)
      FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 0, '') 

Exec(@SQL)  /*Dynamically fill in values */

SELECT t.* FROM #Transposed t 
OUTER APPLY (SELECT TOP 1 rn FROM #Unpivoted u WHERE u.field=t.field) up
ORDER BY up.rn ASC  /* add a link to Unpivoted to fix the item order */

DROP TABLE #Unpivoted
DROP TABLE #Transposed
它通过几个步骤完成您需要的工作

  • 将列转换为包含行的行。注意,必须将所有值强制转换为完全相同的类型。在步骤3中添加行号以筛选行
  • 创建一个临时表,该临时表具有与行数相对应的动态列数
  • 将列名填入动态创建的表中的行中
  • 将值填充到动态创建的表中
  • 归功于和

    当然,这里的列数是有限的,因此如果您尝试将许多行转换为列,您会得到:

    无法创建大于允许值的大小为8066的行 最大行大小为8060


    您希望使用Power BI中的哪个绘图?折线图还是折线和聚集柱形图。我需要在X轴上绘制插入日期,产品名称或条形码可以是聚集列,商店价格和互联网价格都可以是直线。你好@Vojtěch Donal我终于从你的帖子中得到了一些东西,非常感谢