【问题标题】:Need a query to view certain columns of multiple tables and stored procedure in Excel sheet需要查询来查看 Excel 表中多个表的某些列和存储过程
【发布时间】:2018-04-19 10:52:29
【问题描述】:

需要一个查询来查看单个Excel工作表中多个表的某些列和存储过程作为一个表,该表连接到SQL Server 2014中的数据库IDS_SAF

我有两个问题,

  1. 如何编写存储过程来生成屏幕截图中所述的输出。

  2. 如何将该存储过程链接到 Excel 工作表,以便我根据编写的存储过程获取所有数据。

下面提供了每列的Select 查询。我不知道如何加入这些单独的语句以进行单个查询。使用的应用程序是 Excel 2016。

下面屏幕截图中的列是我在 Excel 中想要的列:

..

如前所述,我将为每一列附加 SQL 选择查询。

SELECT 
    [VV_Code],
    [Vessel_Code],
    [Arrival_Date],
    [Terminal_code]
FROM
    [IDS_SAF].[dbo].[Vessel_Voyage]

[dbo].[Vessel_Voyage] 表中,我们有Vessel_Code 而不是Vessel_NameVessel_Name 有一个单独的表,它基于 Vessel_Code。但是我们只需要在 Excel 中获取Vessel_Name 列。

SELECT 
    [Vessel_Code],
    [Vessel_Name]
FROM
    [IDS_SAF].[dbo].[Vessel]

VIR NOS 的选择查询如下所示,

SELECT 
    [VV_CODE],
    [VIR_NO]
FROM
    [IDS_SAF].[dbo].[IGM]

总索引列定义为BL_Count,它没有表,但有一个存储过程。代码如下,

USE [IDS_SAF]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER OFF
GO


CREATE PROC [dbo].[BL_COUNT]
    @VV_CODE VARCHAR(20)
AS
    SELECT
        'Total Bill Of Ladings' as 'BL Count',
        COUNT(BL_NO) as 'Total BLs'
    FROM
        BL_DATA
    WHERE
        VV_CODE = @VV_CODE AND
        ISNULL(UNUSED_FLAG, '') <> '1'

同样,Imp 容器列根据容器大小(20 英尺和 40 英尺)在其中包含两个计数详细信息部分。容器总数必须是这两者的总和。我们也为此提供了存储过程。

USE [IDS_SAF]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER OFF
GO


CREATE PROC [dbo].[BL_CONTAINER_GET_NO_OF_CONTAINERS]
    @VV_CODE VARCHAR(10),
    @BL_NO VARCHAR(30)
AS
    SELECT
        CONTAINER_SIZE_DESCRIPTION,
        (SELECT COUNT(CONTAINER_SIZE_CODE) FROM BL_CONTAINER
        WHERE BL_NO = BC.BL_NO AND CONTAINER_SIZE_CODE = BC.CONTAINER_SIZE_CODE) AS SIZE_COUNT

    FROM
        BL_CONTAINER BC, CONTAINER_SIZE CS
    WHERE

    BL_NO = @BL_NO AND
    VV_CODE = @VV_CODE AND
    BC.CONTAINER_SIZE_CODE = CS.CONTAINER_SIZE_CODE
    GROUP BY CONTAINER_SIZE_DESCRIPTION, BL_NO, BC.CONTAINER_SIZE_CODE

GO

基于这些表和存储过程的选择语句,我需要一个查询来帮助将这些列组合成一个表。

请帮助我。提前谢谢..!!

【问题讨论】:

  • 不打算阅读所有内容,但您能不编写一个新的存储过程来执行两个感兴趣的表之间的连接并拉回您想要的列吗?然后从 Excel 执行那个 sp ?您可以从工作表中选择一个或多个参数。在这里查看我的答案stackoverflow.com/questions/49490189/…。希望这很清楚。
  • 我是编码新手...刚刚学习...设法找到编写查询所需的代码...但我还不知道编写存储过程..所以需要帮助@QHarr
  • 我会把这个问题分成两个问题。将第一个问题发布为如何编写存储过程以生成如上所述的输出。发布一个关于如何从 Excel 执行该存储过程的新问题,从工作表中提取参数。您可以参考我对后一个问题的回答,并为前一个问题更新您的上述问题。这只是我的想法。一位 SQL 专家会根据 W_Codes 的分布和任何现有索引为您编写比我更好的优化查询,以实现 >> 更好的查询计划。
  • 很高兴听到...我会这样做的..!谢谢你的帮助..!!
  • 确保它是一个基于参数的 sp,采用输入参数 W_Code... 以获得关于 W_Codes 上现有索引和分布统计信息的真正体面的答案信息可能很有用,但 SQL 窥视会知道如何最好地构建它。

标签: sql excel database stored-procedures sql-server-2014


【解决方案1】:

设法编写存储过程并且它正在工作。发布它以供进一步参考!

select 
VVO.VV_CODE, 
V.Vessel_name, 
VVO.Arrival_date, 
isnull(IGM.VIR_NO,'NULL') as VIR_NO, 
isnull(VVO.TERMINAL_CODE,'NULL') as TERMINAL_CODE,
(SELECT
COUNT(BL_NO)
FROM
BL_DATA
WHERE
VV_CODE = VVO.VV_CODE) as TOTAL_INDEX,
(select CAST(COUNT(VV_CODE) as int) from BL_Container  where Container_Size_Code = 19 and BL_Container.VV_CODE = VVO.VV_CODE ) as TWENTY_FT,
(select CAST(COUNT(VV_CODE) as int) from BL_Container  where Container_Size_Code = 20 and BL_Container.VV_CODE = VVO.VV_CODE ) as FOURTY_FT,
(select CAST(COUNT(VV_CODE) as int) from BL_Container  where (Container_Size_Code = 20 or Container_Size_Code = 19) and BL_Container.VV_CODE = VVO.VV_CODE ) as Total_No_of_Cntrs,
(Select((select cast(COUNT(VV_CODE) as float) from BL_Container where Container_Size_Code = 19 and BL_Container.VV_CODE = VVO.VV_CODE)/2 + (select COUNT(VV_CODE) from BL_Container where Container_Size_Code = 20 and BL_Container.VV_CODE = VVO.VV_CODE))) as Total_FFE
from Vessel_voyage VVO, Vessel V, IGM where V.Vessel_code = substring(VVO.VV_CODE,1,3) and VVO.VV_CODE = IGM.VV_CODE 

感谢那些尝试过的人..!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 2011-02-22
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    相关资源
    最近更新 更多