J'ai la requête ci-dessous où j'avais l'intention de filtrer / exclure Query: P> où code> soit le type de plage ou le concept de marché est égal au "espace porteur" littéral. Nous avons trouvé en raison de la rétroaction que nous excluons également toute instance où ces champs sont
null code>. C'était une certaine surprise pour moi, tout conseil sur la façon d'expliquer?
SELECT DISTINCT M.MATERIAL,
A.MARKET_CONCEPT,
A.RANGE_TYPE
FROM VW_MRP_ALLOCATION_COMBINED M
JOIN VW_ARTICLE_ATTRIBUTES_COMBINED A ON M.Material = A.Article AND M.SALES_ORGANIZATION = A.SALES_ORGANIZATION
WHERE M.stock_type = ''
AND A.market_concept <> 'PLACEHOLDER'
AND A.RANGE_TYPE <> 'PLACEHOLDER'
AND A.Article in ('BK0348',
'BQ2718',
'BQ2719',
'BS3674',
'CF3607',
'CF3608',
'CF3609',
'CF3610',
'CV5091',
'D94751',
'DH6911',
'DT5039')
AND M.Sales_Organization = 6040;
3 Réponses :
Les enregistrements NULL sont dessinés à l'aide du mot-clé "IS NULL" de comparaison. Voici un exemple de la manière dont vous pouvez obtenir des enregistrements NULL
with data as (select 'PLACEHOLDER' as market_concept,'PLACEHOLDER' as range_type union all select 'MarketConcept1' as market_concept,'Rangetype1' as range_type union all select null as market_concept, null as range_type ) select * from data where ((market_concept <> 'PLACEHOLDER' and range_type <>'PLACEHOLDER' ) --This OR condition brings out the records which are null OR(market_concept is null and range_type is null ) ) +----------------+------------+ | market_concept | range_type | +----------------+------------+ | MarketConcept1 | Rangetype1 | | null | null | +----------------+------------+
Cela suppose que les deux colonnes soient nécessaires pour être nuls ensemble ensemble? Et si seulement un nul?
J'ai supposé être basé sur la requête PO partagée. une seule nulle sur les deux champs serait (Market_Concept est NULL ou RANGER_TYPE est NULL)
Vous pouvez utiliser une fonction ISNULL pour considérer la valeur null identique à celle de l'espace réservé.
SELECT DISTINCT M.MATERIAL, A.MARKET_CONCEPT, A.RANGE_TYPE FROM VW_MRP_ALLOCATION_COMBINED M JOIN VW_ARTICLE_ATTRIBUTES_COMBINED A ON M.Material = A.Article AND M.SALES_ORGANIZATION = A.SALES_ORGANIZATION WHERE M.stock_type = '' AND ISNULL(A.market_concept,'PLACEHOLDER') <> 'PLACEHOLDER' AND ISNULL(A.RANGE_TYPE,'PLACEHOLDER') <> 'PLACEHOLDER' AND A.Article in ('BK0348', 'BQ2718', 'BQ2719', 'BS3674', 'CF3607', 'CF3608', 'CF3609', 'CF3610', 'CV5091', 'D94751', 'DH6911', 'DT5039') AND M.Sales_Organization = 6040;
Je suggérerais d'être explicite: Remarque: cela suppose que 'Code' code> n'est pas
null code>. Si cela est possible, je suggérerais de poser une nouvelle question, avec des données d'échantillonnage claires et des résultats souhaités. P> p>
Les nulls sont l'absence de valeur, ce ne sont pas des chaînes vides. Si vous souhaitez inclure une valeur NULL, vous pouvez utiliser {quelqueValue} est null
Par définition
null code> est une valeur inconnue et ne peut donc pas être égale ou non égale. Si vous souhaitez inclure des valeurs null, vous devez les inclure spécifiquement par ex.
(A.Market_Concept <> 'Placeholder' ou A.Market_Concept est NULL) CODE>
Cela sonne des cloches. Que se passerait-il si j'ai changé la condition en "comme" au lieu d'un égal ou non égal à un égal ou non? Cela ne semble toujours pas fonctionner
Même accord .... vous pouvez faire
coalesce (a.market_concept, '') <> "espace réservoir" code> mais il ne fonctionnera pas aussi bien que la solution que j'ai donnée ci-dessus parce que vous utilisez un fonctionner sur la valeur avant de le comparer,.
La même chose s'applique,
NULL code> est toujours
false code>