0
[OK]をクリックしてガイドに従います。これはテーブルスクリプト+いくつかのテーブルです。2つのテーブルが結合して別のテーブルを持つSQLステートメント
+-------------+-------------------------------+--------------+-------+
| description | ProductOmschrijving | ProductPrijs | Total |
+-------------+-------------------------------+--------------+-------+
| 112-112 | grp-sec-spla-office-eng | 10.12 | 9 |
| 114-114 | grp-sec-spla-office-prof-2016 | 5.45 | 8 |
+-------------+-------------------------------+--------------+-------+
しかし、私は取得する必要があります:クエリと
USE [tempdb]
GO
CREATE TABLE [dbo].[table1](
[cn] [nvarchar](1024) NULL,
[member] [nvarchar](1024) NULL,
[description] [nvarchar](1024) NULL,
[Date] [datetime] NULL,
[IsArchived] [bit] null
)
GO
CREATE TABLE [dbo].[table2](
[cn] [nvarchar](1024) NULL,
[member] [nvarchar](1024) NULL,
[description] [nvarchar](1024) NULL,
[Date] [datetime] NULL,
[IsArchived] [bit] null
)
GO
CREATE TABLE [dbo].[table4](
[cn] [nvarchar](1024) NULL,
[member] [nvarchar](1024) NULL,
[description] [nvarchar](1024) NULL,
[Date] [datetime] NULL,
[IsArchived] [bit] null
)
GO
CREATE TABLE [dbo].[table3](
[ID] [int] not NULL,
[ProductID] [nvarchar](1024) NULL,
[ProductOmschrijving] [nvarchar](1024) NULL,
[ProductPrijs] [money] NULL,
)
GO
INSERT INTO table1 VALUES ('grp-sec-spla-office','john; chris; jack; marc;','112-112','', '');
INSERT INTO table1 VALUES ('grp-sec-spla-office-prof','jack; marc;','114-114','', '');
INSERT INTO table2 VALUES ('grp-sec-spla-office','cees; klaas','112-112','', '');
INSERT INTO table2 VALUES ('grp-sec-spla-office-prof','jan; piet','114-114','', '');
INSERT INTO table4 VALUES ('grp-sec-spla-office-prof','jack; marc;','114-114','', '');
INSERT INTO table4 VALUES ('grp-sec-spla-office','piet; ellen','112-112','', '');
INSERT INTO table4 VALUES ('grp-sec-spla-visio','henk; alwin','112-116','', '');
INSERT INTO table3 VALUES (1,'112-112','grp-sec-spla-office-eng','10.12');
INSERT INTO table3 VALUES (2,'114-114','grp-sec-spla-office-prof-2016','5.45');
INSERT INTO table3 VALUES (3,'112-116','grp-sec-spla-visio-blabla','7.12');
INSERT INTO table3 VALUES (4,'112-118','grp-sec-ac-office-sta-eng','2.45');
INSERT INTO table3 VALUES (5,'112-120','grp-sec-ac-office-pro-eng','2,50');
GO
私の結果は
+-------------+-------------------------------+--------------+-------+
| description | ProductOmschrijving | ProductPrijs | Total |
+-------------+-------------------------------+--------------+-------+
| 112-112 | grp-sec-spla-office-eng | 10.12 | 9 |
| 114-114 | grp-sec-spla-office-prof-2016 | 5.45 | 8 |
| 112-116 | grp-sec-spla-visio-blabla | 7.12 | 2 |
| 112-118 | grp-sec-ac-office-sta-eng | 2.45 | 0 |
| 112-120 | grp-sec-ac-office-pro-eng | 250.00 | 0 |
+-------------+-------------------------------+--------------+-------+
は、これが今の私が使用するクエリです:
SELECT
table1.description,
table3.ProductOmschrijving,
table3.ProductPrijs,
sum((isnull(LEN(table1.member) - LEN(REPLACE(table1.member, ';', '')),-1) + 1) +
isnull(LEN(table2.member) - LEN(REPLACE(table2.member, ';', '')),-1) + 1 +
isnull(LEN(table4.member) - LEN(REPLACE(table4.member, ';', '')),-1) + 1) AS Total
FROM table1
inner join table3 ON table1.description = table3.ProductID
left outer join table2 ON table1.description = table2.description
AND table2.IsArchived = 0
left outer join table4 on table1.description = table4.description
and table4.IsArchived = 0
where table1.IsArchived = 0
GROUP BY table1.description
, ProductOmschrijving
, ProductPrijs
table1、table2、table4は変更可能です(特にmember fiフィールド)。後で(将来的に)新しいテーブル5をクエリに追加すると、結果は同じになる必要がありますが、メンバーだけを結果に追加する必要があります。新しいテーブルにメンバーがいなくても。
もっと明確ですか?あなたの時間と助けに感謝します。
iは表3(商品テーブル)はもちろんの先頭テーブルでなければならないことを理解全体のポストを作ったAhhghh。だから私は、table1の代わりにtable3から行くようにクエリを編集しました。いいえ、それは完璧に動作しています!
SELECT
table3.ProductID,
table3.ProductOmschrijving,
table3.ProductPrijs,
sum((isnull(LEN(table1.member) - LEN(REPLACE(table1.member, ';', '')),-1) + 1) +
isnull(LEN(table2.member) - LEN(REPLACE(table2.member, ';', '')),-1) + 1 +
isnull(LEN(table4.member) - LEN(REPLACE(table4.member, ';', '')),-1) + 1)
AS Total
FROM table3
left join table1 ON table3.productid = table1.description
and table1.IsArchived = 0
left join table2 ON table3.productid = table2.description
AND table2.IsArchived = 0
left join table4 on table3.productid = table4.description
and table4.IsArchived = 0
GROUP BY table3.productid
, ProductOmschrijving
, ProductPrijs
と結果:
+-----------+-------------------------------+--------------+-------+
| ProductID | ProductOmschrijving | ProductPrijs | Total |
+-----------+-------------------------------+--------------+-------+
| 112-112 | grp-sec-spla-office-eng | 10.12 | 9 |
| 112-116 | grp-sec-spla-visio-blabla | 7.12 | 2 |
| 112-118 | grp-sec-ac-office-sta-eng | 2.45 | 0 |
| 112-120 | grp-sec-ac-office-pro-eng | 250.00 | 0 |
| 114-114 | grp-sec-spla-office-prof-2016 | 5.45 | 8 |
+-----------+-------------------------------+--------------+-------+
不足している列はクエリには含まれません。それらはサブクエリにありますが、メインクエリにはありません。 –
こんにちは、ショーン、私は知っている。しかし、私はそれらを追加するときにエラーが発生します。メッセージ4104、レベル16、状態1、行12 マルチパート識別子「Product.ProductOmschrijving」はバインドできませんでした。 – viest
ちょうどあなたがエラーを起こすと言ってもそれほど役に立ちません。エラーが何であるかを説明すると役に立つでしょう。この場合、私はそれがグループにも追加していないからだと思う。 –